实现

call 语法:

  • fun.call(context, arg1,arg2…)
  • context: 在fun函数中运行时指定的this值
  • arg1,arg2…:指定的参数列表
Function.prototype.kaimoCall = function (context, ...args) {
context = context || window;
// 保留 this
const symbolFn = Symbol();
context[symbolFn] = this;
// 执行函数:通过隐式绑定函数并传递参数
const result = context[symbolFn](...args);
// 删除上下文对象的属性
delete context[symbolFn];
// 返回执行结果
return result;
}

测试

const kaimoObj = {
name: 'kaimo'
};
function kaimoTest() {
console.log(this.name);
}
kaimoTest.kaimoCall(kaimoObj);

手写系列 # 3:实现 call 方法_传递参数