| 失效鏈接處理 |
|
2024前端開發(fā)面試題 PDF 下載
轉(zhuǎn)載自:http://java.python222.com/article/1709
相關截圖:
![]()
主要內(nèi)容:
相同點:
作用相同,都是動態(tài)修改this指向;都不會修改原先函數(shù)的this指向。
異同點:
1. 執(zhí)行方式不同:
call和apply是改變后頁面加載之后就立即執(zhí)行,是同步代碼。
bind是異步代碼,改變后不會立即執(zhí)行;而是返回一個新的函數(shù)。
2. 傳參方式不同:
call和bind傳參是一個一個逐一傳入。
apply可以使用數(shù)組的方式傳入的 。
call和 apply不能使用剩余參數(shù)的方式傳參,bind 可以使用剩余參數(shù)的方式傳入(柯里化)。
3. 修改this的性質(zhì)不同:
call、apply只是臨時的修改一次,也就是call和apply方法的那一次;當再次調(diào)用原函數(shù)的時候,它的指
向還是原來的指向。
手寫 call 函數(shù)
call 函數(shù)的實現(xiàn)步驟:
判斷調(diào)用對象是否為函數(shù),即使我們是定義在函數(shù)的原型上的,但是可能出現(xiàn)使用 call 等方式調(diào)用的情況。
判斷傳入上下文對象是否存在,如果不存在,則設置為 window 。
處理傳入的參數(shù),截取第一個參數(shù)后的所有參數(shù)。
將函數(shù)作為上下文對象的一個屬性。
使用上下文對象來調(diào)用這個方法,并保存返回結(jié)果。
刪除剛才新增的屬性。
返回結(jié)果。
手寫 apply 函數(shù)
我們已經(jīng)了解了 call的實現(xiàn)原理,call() 方法接受的是參數(shù)列表,而 apply() 方法接受的是一個參數(shù)數(shù)
組。所以在 call 實現(xiàn)的基礎上我們很容易寫出 apply
apply 函數(shù)的實現(xiàn)步驟:
判斷調(diào)用對象是否為函數(shù),即使我們是定義在函數(shù)的原型上的,但是可能出現(xiàn)使用 call 等方式調(diào)用的情況。
判斷傳入上下文對象是否存在,如果不存在,則設置為 window 。
將函數(shù)作為上下文對象的一個屬性。
判斷參數(shù)值是否傳入
使用上下文對象來調(diào)用這個方法,并保存返回結(jié)果。
刪除剛才新增的屬性
返回結(jié)果
|




蘇公網(wǎng)安備 32061202001004號


