call和apply的異同

2022-05-03 04:33:08 字數 1011 閱讀 3733

共同點:

作用:呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。將乙個函式的物件上下文從初始的上下文改變為由 thisobj 指定的新物件。如果沒有提供 thisobj 引數,那麼 global 物件被用作 thisobj。 

以call為例,語法:obj1.method1.call(obj2,argument1,argument2)

舉乙個具體的例子 

function add(a,b) 

function sub(a,b) 

add.call(sub,3,1); 

這個例子中的意思就是用 add來替換sub ,add.call(sub,3,1) == add(3,1) ,所以執行結果為:alert(4); // 注意:js 中的函式其實是物件,函式名是對 function 物件的引用。 

看乙個稍微複雜一點的例子 

function class1()  } 

function class2() 

var c1 = new class1(); 

var c2 = new class2(); 

c1.shownam.call(c2); 

注意,call 的意思是把 c1 的方法放到c2上執行,原來c2是沒有shownam() 方法,現在是把c1 的shownam()方法放到 c2 上來執行,所以this.name 應該是 class2,執行的結果就是 :alert("class2"); 

繼承function class1()  } 

function class2() 

var c2 = new class2(); 

c2.showtxt("cc"); 

這樣 class2 就繼承class1了,class1.call(this) 的 意思就是使用 class1 物件代替this物件,那麼 class2 中不就有class1 的所有屬性和方法了嗎,c2 物件就能夠直接呼叫class1 的方法以及屬性了,執行結果就是:alert(「cc」); 

不同點:

call第二個引數為引數列表

call和apply方法的異同

相信很多前端小夥伴們在寫 的時候應該都用過call 這兩個方法,應該也對這兩個方法有個基本的了解。但肯定也有些小夥伴對它們不是很熟悉,那這次就來 一下這兩個方法 想要深入了解call 這兩個方法,那麼必須要先知道他們的基本作用 改變物件的執行上下文 我們在寫乙個方法的時候,總是會用到乙個關鍵字thi...

call和apply方法的異同

基本作用 改變物件的執行上下文。this指向執行上下文。執行環境 this指向的永遠是呼叫該方法的物件 function func 中方法執行後控制台輸出1,由於func是全域性物件window下的乙個方法,那麼呼叫該方法的物件就應該是全域性物件window,所以this理論上指向的物件就應該是wi...

Call 與Apply 的異同

在了解異同之前,先來搞清楚這兩個方法都是怎麼用的 call function.call obj arg1 arg2 argn 呼叫call的物件必須是個函式function call的第乙個引數將會是function改變上下文後指向的物件,也就是上面例子裡的小剛,也就是上上面例子裡的老婆大人,如果不...