Javascript重新绑定绑定功能

时间:2015-10-25 03:31:31

标签: javascript

说我有片段

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 ,但看起来重新绑定它不起作用。

我知道在更改功能上下文时调用应用绑定。但是当它已经绑定时它似乎不起作用。

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

1 个答案:

答案 0 :(得分:4)

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

因此:

  • this使用hi
  • 执行某些操作
  • this忽略其marcie并使用this作为hi
  • 来调用{_hi: 'Sir'}
  • this忽略其patty并使用this作为marcie
  • 来调用{_hi: 'Lucille'}

但是,由于this忽略marciethis无用。

相反,您应该始终在原始函数上使用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"] 使用hi
  • 执行某些操作
  • this忽略其marcie并使用this作为hi
  • 来调用{_hi: 'Sir'}
  • this忽略其patty并使用this作为hi
  • 来调用{_hi: 'Lucille'}