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

Posted 凯小默

tags:

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

实现

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

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

JavaScript基础之--- 手写 apply方法 的实现

手写apply()

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

手写实现applycallbind

前端面试题 ---- 手撕JavaScript call apply bind 函数(超详细)