Из MDN:
Метод bind() создает новую функцию, которая при вызове имеет это ключевое слово, установленное на предоставленное значение
И я могу с радостью увидеть, как он работает в этом примере:
(function () {
console.log(this);
}).bind({foo:"bar"})();
который регистрирует Object { foo="bar"}
.
Но если я связываю другой вызов вызова или даже вызов вызова, я все равно получаю функцию, вызванную с помощью "this", назначенной объекту, переданному первому bind. Примеры:
(function () {
console.log(this);
}).bind({foo:"bar"}).bind({oof:"rab"})();
&
(function () {
console.log(this);
}).bind({foo:"bar"}).call({oof:"rab"});
Оба log Object { foo="bar"}
вместо того, что я ожидал бы: Object { oof="rab"}
.
Независимо от того, сколько цепочек вызовов я связываю, кажется, что только первый из них имеет эффект.
Почему?
Это может помочь. Я только что узнал, что версия jQuery ведет себя одинаково!: О
jQuery.proxy(
jQuery.proxy(function() {
console.log(this);
},{foo:"bar"})
,{oof:"rab"})();
logs Object { foo="bar"}