1. 程式人生 > 實用技巧 >Javascript中call()和apply()理解

Javascript中call()和apply()理解

基礎理解

  • 每個函式都包含兩個非繼承而來的方法:call apply
  • 都是在特定的作用域呼叫函式,設定函式體內的this指向,以擴充套件函式賴以執行的作用域
  • apply接受兩個引數,一個是執行的作用域,一個是陣列引數陣列
    applay(函式作用域,引數)
    
    如果引數不是一個數組將會導致報錯,如果沒有提作用域和引數任何一個引數,那麼將導致Global物件作為this.obj
  • call第一個引數是執行的作用域,但是傳力給函式的引數必須列舉出來
    call(函式作用域,引數1,引數2,引數3)
    
    call方法可以用來代替另一個物件呼叫一個方法,call方法可以將一個函式的物件上下文從初始的上下文改變為thisObj指定的物件,如果沒有提供的thisObj引數,那麼Global物件別用於thisObj

使用情況

在給物件引數的情況下,如果引數的形式是陣列的時候,比如apply示例裡面傳遞了引數arguments,這個引數是陣列型別,並且在呼叫Person的時候引數的列表是對應一致的(也就是Person和Student的引數列表前兩位是一致的) 就可以採用 apply , 如果我的Person的引數列表是這樣的(age,name),而Student的引數列表是(name,age,grade),這樣就可以用call來實現了,也就是直接指定引數列表對應值的位置(Person.call(this,age,name,grade));