代碼如下:
我們可以將call()和apply()看做是某個對象的方法,通過調用方法的實行來間接調用函數。call()和apply()的第一個實參是要調用函數的母對象,它是調用上下文,在函數體內通過this來獲得對它的引用。要想對對象o的方法來調用函數f(), 可以這樣使用call()和apply(): f.call(o) f.apply(o).[1]
先來分析一下call,這里有ECMAScript 3rd Edition對call函數的解釋[2]:當call方法被一個function對象調用時(func.call(0)),需要傳入一個必須的參數和若干個非必須的參數,它的執行過程是這樣的:
a, 如果調用call的對象是不可運行的,拋出一個TypeError錯誤。
b, 設置參數列表為空
c, 如果被調用的方法傳入不止一個參數,那么依次把arg1,arg2…插入到參數列表里
d, 返回調用call的函數結果,把調用函數(func)中的this用傳入的參數1替換,把傳入的參數列表當作這個函數的參數。
實際上,call函數是function對象的原型,也就是說,當調用call的函數必須也是個函數,當調用這個call時,把調用call的函數中的this用傳入的對象替換就行了。下面有個例子:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com