實作
apply 文法:
- fun.apply(context, [argsArr])
- context:在fun 函數運作時指定的this值
- argsArr:一個數組或者是類數組對象,其中數組中元素會作為單獨參數傳給fun。當參數值為null 或者undefined時,表示不需要傳入任何參數。
Function.prototype.kaimoApply = function (context) {
context = context || window;
// 保留 this
const symbolFn = Symbol();
context[symbolFn] = this;
// 執行函數:處理參數上和 call 有差別
console.log(arguments, arguments[1]);
const result = arguments[1] ? context[symbolFn](...arguments[1]) : context[symbolFn]();
// 删除上下文對象的屬性
delete context[symbolFn];
// 傳回執行結果
return result;
}
const kaimoObj = {
name: 'kaimo'
};
function kaimoTest() {
console.log(this.name);
}
kaimoTest.kaimoApply(kaimoObj, [1, 2, 3]);