在JavaScript中链接.bind()调用。意外的结果?

10 浏览
0 Comments

在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"}。

0