多次对函数使用bind

bind函数用于改变this的指向,如果对一个函数多次进行bind后的this,是否会改变?

我们先准备如下代码

    let a = { name: '我是对象a' }
    let b = { name: '我是对象a' }
    let fn = function () { console.log(this) }

开始正常的bind使用:

    fn.bind(a)()  // {name: "我是对象a"}

现在对这个函数使用第二次bind

    fn.bind(a).bind(b)()  // {name: "我是对象a"}

返回的结果还是对象a,其实不管bind几次,this的指向永远是第一次的bind决定;

我们可以手写一个简单的bind函数实现,看看内部是怎么运行的

    function bind(fn, context) {
      return function () {
        return fn.apply(context, arguments)
      }
    }

再用于我们的案例中

    bind(fn, a)()  // {name: "我是对象a"}
    bind(bind(fn, a), b)()  // {name: "我是对象a"}

注意以上例子,我们写一个内部模拟的实现就明白为什么this永远是第一次bind决定的了

在bind对象b的时候,内部已经是这种结构了

bind(bind(fn, a), b)()  =>   bind(fn, a).apply(b, arguments)

能看出来再使用bind时,是往外层的函数使用bind,那么this永远是第一次bind决定的,改变不了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值