Сохранение значения this при использовании прослушивателя событий

У меня есть следующая функция:

onDocumentKeyUp: function (e) {
    if (e.keyCode === 27) {
       this.deactivate();
    }
}

Я хотел связать это так:

$(document).on('keyup', onDocumentKeyUp);

Однако, когда я это делаю,this внутриonDocumentKeyUp Функция относится к документу. Я решил это, выполнив:

var self = this;
$(document).on('keyup', function(e) { self.onDocumentKeyUp(e); });

Это работает, но что-то мне там говоритЭто более чистый способ сделать это. Было бы.call() или же.apply() как-то .. подать заявку здесь? Я'Я до сих пор не уверен, как именно работают эти функции.

Кроме того, я неТ обязательно нужно ограничитьсяjQuery.on(), Если естьваниль» способ сделать это, будь моим гостем, чтобы научить меня.

 cabaret18 окт. 2012 г., 09:36
Мог бы сделать, но это не такмне намного чище. Я хочу знать, есть ли чистый, идиоматический способ передать значение этого с помощью обработчика событий.
 cbayram18 окт. 2012 г., 09:22
Вы имеете в виду как? $ (Документ) .он (»KeyUp», function (e) {onDocumentKeyUp.call (self, e); });

Ответы на вопрос(2)

Решение Вопроса

Привлечь ваше внимание наdata параметрon метод здесь:http://api.jquery.com/on/ Также вы можете использовать метод jQuery.proxy:http://api.jquery.com/jQuery.proxy/

Вот jsFiddle:jsFiddle

Ты можешь использовать.bind() установить контекст (без немедленного вызова его какcall или жеapply):

$(document).on('keyup', this.onDocumentKeyUp.bind(this));

Поскольку этот метод поддерживается только браузерами, совместимыми с ES5.1, вы можете использоватьjQuery.proxy вместо того, чтобы заполнить его.

Ваш ответ на вопрос