在JavaScript中链接.bind()调用。意外的结果?
- 论坛
- 在JavaScript中链接.bind()调用。意外的结果?
10 浏览
在JavaScript中链接.bind()调用。意外的结果?
从MDN中可以看到:
bind()方法创建一个新函数,当调用时,其this关键字设置为提供的值。
我可以很高兴地看到它在这个例子中起作用:
(function () {
console.log(this);
}).bind({foo:"bar"})()
输出Object { foo="bar"}。
但是,如果我链式调用另一个bind调用,甚至是一个"call"调用,我仍然会得到将函数调用并将"this"赋值给传递给第一个bind的对象的结果。示例:
(function () {
console.log(this);
}).bind({foo:"bar"}).bind({oof:"rab"})()
&
(function () {
console.log(this);
}).bind({foo:"bar"}).call({oof:"rab"});
两者都输出Object { foo="bar"},而不是我期望的Object { oof="rab"}。
无论我链式调用多少个bind调用,只有第一个调用似乎有效。
为什么?
这可能会有所帮助。我刚刚发现jQuery的版本也是这样行为的! :O
jQuery.proxy(
jQuery.proxy(function() {
console.log(this);
},{foo:"bar"})
,{oof:"rab"})()
输出Object { foo="bar"}。