bind()函数知多少

bind 是函数特有的一个方法,可以创建一个绑定了 this 的新函数。

function Class1() {
  this.name = "Tom";
  this.showName = function (pre) {
    console.log(pre + this.name);
  };
}
c1 = new Class1();
c1.showName("A"); // ATom

function Class2() {
  this.name = "Jack";
}
c2 = new Class2();
let res = c1.showName.bind(c2, "B");
res("C"); // BJack

倒数第二行可以看到bind返回的是一个函数,绑定了this的新函数。且当我们调用它并且再传额外的参数“C”的时候没有报错,这就是bind函数另一个用的比较少的作用:积累参数(函数柯里化)。

        ·创建一个绑定了this的新函数

        ·积累参数

实现一个bind:

Function.prototype.myBind = function (thisArg, ...prefixArgs) {
  const fn = this;
  return function (...args) {
    return fn.call(thisArg, ...prefixArgs, ...args);
  };
};

要点是利用 闭包

让返回的新函数可以访问到三个私有属性:

  • fn(原来的函数)

  • thisArg(需要强绑不变的 this 指向)

  • prefixArgs 属性

当我们调用这个新函数时,我们会执行 fn 函数,并利用 call 方法来指定 this 为 thisArg,然后将预填充的多个参数,和新函数接收的参数依次填入。

参考链接:前端面试题:手写 bind_前端西瓜哥的博客-CSDN博客_前端手写bind

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值