apply和call的用法

2021-09-08 23:32:36 字數 653 閱讀 1890

查了大量的資料, 經過n次測試, 總結如下(希望給像我一樣的菜鳥有幫助)

call:

方法名a.call(物件名b, [執行a需要的引數,用逗號分隔]);

看例子

function obj1()

} function obj2()

var k1 = new obj1();

var k2 = new obj2();

上面定義了兩個物件它們都有arg這個屬性, 乙個為1, 乙個2, 當我們執行

k1.m(10, 20) 時, 得到31, 也就是說:

k1.m(10, 20) == 31 //此時this為k1, arg為1, 這句好理解

這句意思是說: 執行k1物件的m方法, 但在執行的時候把該方法內部出現的this指向k2, 同時把10, 20這2個引數傳給m.

由於k1.m在執行時,內部this指向了k2, 而k2的arg屬性值為2, 因此

this.arg + a + b = 2 + 10 + 20 = 32, 也就是說:

要用call方法, 只需要把後面引數換成用逗號分隔的就行, 即:

k1.m.call(k2, 10, 20)

申明: 我也是菜鳥, 有錯的地方請指出. 之所以寫這個, 是因為看到好多教材上都說什麼繫結繫結的, 完全看不懂.

apply和call的用法

應用某一物件的乙個方法,用另乙個物件替換當前物件。引數 thisobj 可選項。將被用作當前物件的物件。argarray 可選項。將被傳遞給該函式的引數陣列。說明 如果 argarray 不是乙個有效的陣列或者不是arguments物件,那麼將導致乙個 typeerror。如果沒有提供 argarr...

js中call和apply用法

1 方法定義 call方法 語法 call thisobj arg1 arg2 argn 定義 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。說明 call 方法可以用來代替另乙個物件呼叫乙個方法。call 方法可將乙個函式的物件上下文從初始的上下文改變為由 thisobj 指定的新物件。如果沒...

JS中Apply和Call的用法

1 函式層面 obj.call obj1,argument1,argument2,這兩個函式都是使用obj物件來替換obj1來執行對應的函式 這個可用於物件的繼承 例如 function add a,b function sub a,b add.call sub,a,b 使用add函式來替代sub進...