Javascript中call()和apply()理解
阿新 • • 發佈:2020-11-02
基礎理解
- 每個函式都包含兩個非繼承而來的方法:
call
apply
- 都是在特定的作用域呼叫函式,設定函式體內的this指向,以擴充套件函式賴以執行的作用域
- apply接受兩個引數,一個是執行的作用域,一個是陣列引數陣列
如果引數不是一個數組將會導致報錯,如果沒有提作用域和引數任何一個引數,那麼將導致Global物件作為this.objapplay(函式作用域,引數)
- call第一個引數是執行的作用域,但是傳力給函式的引數必須列舉出來
call方法可以用來代替另一個物件呼叫一個方法,call方法可以將一個函式的物件上下文從初始的上下文改變為thisObj指定的物件,如果沒有提供的thisObj引數,那麼Global物件別用於thisObjcall(函式作用域,引數1,引數2,引數3)
使用情況
在給物件引數的情況下,如果引數的形式是陣列的時候,比如apply示例裡面傳遞了引數arguments,這個引數是陣列型別,並且在呼叫Person的時候引數的列表是對應一致的(也就是Person和Student的引數列表前兩位是一致的) 就可以採用 apply , 如果我的Person的引數列表是這樣的(age,name),而Student的引數列表是(name,age,grade),這樣就可以用call來實現了,也就是直接指定引數列表對應值的位置(Person.call(this,age,name,grade));