實現call、apply 及 bind 函式
阿新 • • 發佈:2022-03-16
今日學習內容:
(1)call 函式的實現步驟:
- 判斷呼叫物件是否為函式,即使是定義在函式的原型上的,但是可能出現使用 call 等方式呼叫的情況。
- 判斷傳入上下文物件是否存在,如果不存在,則設定為 window 。
- 處理傳入的引數,擷取第一個引數後的所有引數。
- 將函式作為上下文物件的一個屬性。
- 使用上下文物件來呼叫這個方法,並儲存返回結果。
- 刪除剛才新增的屬性。
- 返回結果。
(2)apply 函式的實現步驟:
- 判斷呼叫物件是否為函式,即使是定義在函式的原型上的,但是可能出現使用 call 等方式呼叫的情況。
- 判斷傳入上下文物件是否存在,如果不存在,則設定為 window 。
- 將函式作為上下文物件的一個屬性。
- 判斷引數值是否傳入
- 使用上下文物件來呼叫這個方法,並儲存返回結果。
- 刪除剛才新增的屬性
- 返回結果
- 判斷呼叫物件是否為函式,即使是定義在函式的原型上的,但是可能出現使用 call 等方式呼叫的情況。
- 儲存當前函式的引用,獲取其餘傳入引數值。
- 建立一個函式返回
- 函式內部使用 apply 來繫結函式呼叫,需要判斷函式作為建構函式的情況,這個時候需要傳入當前函式的 this 給 apply 呼叫,其餘情況都傳入指定的上下文物件。
作者:CUGGZ
連結:https://juejin.cn/post/6941194115392634888
來源:稀土掘金