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

Posted 凯小默

tags:

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

实现

bind 跟 apply 、call 实现不同的地方在于,它返回的是一个函数。

bind 语法:

  • fun.bind(context, arg1, arg2, …)
  • context:当绑定函数被调用时,该参数会作为原函数运行时的this指向;当使用new操作符调用绑定函数时,该参数无效。
  • arg1,arg2…:绑定函数被调用时,这些参数将位于实参之前传递给绑定的方法。
Function.prototype.kaimoBind = function (context) {
  // 保存原函数
  const self = this;
  // bind 函数中的参数
  const args = [...arguments].slice(1);
  console.log(args);
  // 创建一个新函数
  return function () {
    // 这里的 arguments 是外部函数传入的
    console.log(arguments);
    return self.apply(context, args.concat(...arguments));
  }
}
const kaimoObj = {
  name: 'kaimo'
};
function kaimoTest() {
  console.log(this.name);
}
kaimoTest.kaimoBind(kaimoObj, [1,2])([3]);

以上是关于手写系列 # 5:实现 bind 方法的主要内容,如果未能解决你的问题,请参考以下文章

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

手写实现applycallbind

《Java手写系列》-手写MyBatis框架

源码来袭:bind手写实现

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

Javascript手写call, apply, bind