实现

apply 语法:

  • fun.apply(context, [argsArr])
  • context:在fun 函数运行时指定的this值
  • argsArr:一个数组或者是类数组对象,其中数组中元素会作为单独参数传给fun。当参数值为null 或者undefined时,表示不需要传入任何参数。

处理参数上和 call 有区别,其他基本一样

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]);

手写系列 # 4:实现 apply 方法_数组