Javascript重新绑定一个绑定函数

Javascript Rebinding An Bound Founction

本文关键字:绑定 一个 函数 Javascript 新绑定      更新时间:2023-09-26

假设我有一个片段

function hi() {
    console.log('Hello ' + this._hi);
}
var marcie = hi.bind({_hi: 'Sir'});
var patty = marcie.bind({_hi: 'Lucille'});
marcie(); // output: Hello Sir
patty(); // expected: Hello Lucille // actual: Hello Sir

我想重新绑定绑定函数marcie,但看起来重新绑定它不起作用。

我知道callapplybind在改变函数上下文。但是,当它已经被绑定时,它似乎不起作用。

如何在javascript中重新绑定绑定函数?还是不允许?

当您使用bind时,您将获得一个新函数,该函数是某种代理:当您调用该代理时,它忽略传递的this并调用绑定this的原始函数。

因此:

  • hithis做某事
  • marcie忽略this,调用hi, {_hi: 'Sir'}作为this
  • patty忽略this,调用marcie, {_hi: 'Lucille'}作为this

但是,由于marcie忽略了this,所以patty是无用的。

相反,您应该在原始函数上始终使用bind:

function hi() {
  return 'Hello ' + this._hi;
}
var marcie = hi.bind({_hi: 'Sir'}),
    patty = hi.bind({_hi: 'Lucille'});
[marcie(), patty()]; // ["Hello Sir", "Hello Lucille"]
  • hithis做了一些事情
  • marcie忽略this,调用hi, {_hi: 'Sir'}作为this
  • patty忽略this,调用hi, {_hi: 'Lucille'}作为this