说我有片段
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中重新绑定绑定函数? 或者是不允许的?
答案 0 :(得分:4)
使用bind
时,会得到一个新函数,它是某种代理:当您调用该代理时,它会忽略传递的this
并使用绑定{{1}调用原始函数}}
因此:
this
使用hi
this
忽略其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"]
使用hi
this
忽略其marcie
并使用this
作为hi
{_hi: 'Sir'}
this
忽略其patty
并使用this
作为hi
{_hi: 'Lucille'}