Следующий код не работает, как я интуитивно ожидать, что это:JQuery/JavaScript события - прототип обработчика событий
function MyObject(input) {
input.change(this._foo);
this.X = undefined;
}
MyObject.prototype._foo = function() {
alert("This code is never called");
// but if it did
this.X = true;
}
var test_input = $("input#xyz"); // a random, existing input
var m = MyObject(test_input); // attach handler (or try to)
test_input.change(); // trigger event
alert(m.X); // undefined
Я бы ожидать, что _foo()
будет называться (и, если это когда-нибудь случится, что this
переменная _foo()
будет конкретизацией MyObject.
кто-нибудь знает, почему это не работает, и любого альтернативного шаблона для передачи объекта в обработчик события?
Спасибо за чтение ING.
Brian
Существуют существующие методы для добавления событий ('bind()', 'live()') и запуска событий ('trigger()') в jQuery. Я не уверен, что вы здесь делаете. Кроме того, мне кажется, что если вы хотите вызвать метод объектов, вам нужно называть его как 'this._foo()', а не 'this._foo', иначе вы выполняете назначение. Вполне возможно, что я вас не понимаю. – artlung
Возможный дубликат [Как получить доступ к правильному \ 'this \'/context внутри обратного вызова?] (Http://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-inside -a-callback) – Bergi
Спасибо, Берги. Связанный с ним вопрос был задан через три года после того, как этот был закрыт, так что не будет ли дублирование на самом деле идти в другом направлении? Это неверно и, кажется, вводит в заблуждение, чтобы отметить этот вопрос как «уже ответивший» на вопрос, который возник через три года. Не будет ли этот вопрос дублировать этот вопрос? –