手写系列 # 3:实现 call 方法

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写系列 # 3:实现 call 方法相关的知识,希望对你有一定的参考价值。

实现

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 方法的主要内容,如果未能解决你的问题,请参考以下文章

手写系列 # 5:实现 bind 方法

手写JS面试题 --- call apply bind 实现

JavaScript基础之--- 手写 call 的实现

手写callapplybind函数和arguments&数组函数slice的实现

手写实现applycallbind

Javascript手写call, apply, bind