共同點:
作用:呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。將乙個函式的物件上下文從初始的上下文改變為由 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改變上下文後指向的物件,也就是上面例子裡的小剛,也就是上上面例子裡的老婆大人,如果不...