Я спутал себя в следующем случае:Как «это» ищется в обратном вызове Javascript
function foo() {
}
foo.prototype.bar1 = function() {
console.log(this); // shows "Window"!!
}
foo.prototype.bar2 = function(func) {
func();
}
var f = new foo();
f.bar2(f.bar1);
Как/почему бы результат console.log (это) есть «окно»? Я думал, что независимо от того, как вы называете публичную функцию класса здесь, «это» всегда должно ссылаться на «foo».
А также, что такое правильный способ избежать такого рода ошибок?
Благодаря
правила не отличаются от любого другого вызова функции (см Http: //stackoverflow.com/questions/16382165/why-do-i-lose-the-context-of-this-in-javascript). Функция Function.prototype.bind (или эмуляция) может быть здесь полезной, как и общие закрытия. – user2246674
Вы можете использовать 'func.apply (this)' для получения ожидаемого поведения, я думаю. –
'func.call (this)' должен делать. – elclanrs