JS 关于链式 bind 的操作

JS中的.bind方法用于改变函数调用时的this指向,但链式.bind只会保留第一次的绑定。文章提供了一个自定义的bind实现,展示了在链式调用时,内部函数通过apply层层传递this的情况,强调了最内层的apply决定最终的this值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 JS 中可以利用 .bind 的方式重新指定 this 的指向,而级联(链式)的 .bind 并不会奏效,只会绑定第一个 bind 的 this。以下是一种 .bind 的实现:

if (!Function.prototype.bind) {
  Function.prototype.bind = function(oThis) {
    if (typeof this !== 'function') {
      throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable')
    }
    var aArgs   = Array.prototype.slice.call(arguments, 1),
        fToBind = this,
        fNOP    = function() {},
        fBound  = function() {
          return fToBind.apply(
            this instanceof fNOP ? this : oThis,
            aArgs.concat(Array.prototype.slice.call(arguments))
          )
        }
    if (this.prototype) {
        fNOP.prototype = this.prototype; 
    }
    fBound.prototype = new fNOP()
    return fBound
  }
}

可以看到,若链式进行 .bind 操作,实际的代码会变为一层一层的 apply 嵌套,在此情况下,只有最内层的 apply this 会对原始函数奏效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值