Старый / традиционный способ:
Захват this
в переменной:
this.initialize = function(selector) {
var that = this;
$('span#banner1-nav').click(function(event) {
that._onClickNavigation(event);
});
}
Вы также можете присвоить this
переменной, например instance
:
function ScrollBanner() {
var instance = this;
// ...
}
и ссылаться на instance
вместо this
во всех вызовах.
Общая идея - сохранить this
в переменной более высокого уровня..
Способ ECMAScript5:
ECMAScript5 вводит новое свойство функций: .bind()
. Документация MDC показывает реализацию для браузеров, которые ее не поддерживают.С его помощью вы можете связать определенный контекст с функцией:
this.initialize = function(selector) {
$('span#banner1-nav').click(this._onClickNavigation.bind(this));
}
, но за кадром она делает то же самое.Преимущество состоит в том, что вы используете встроенную функциональность в браузере, которая поддерживает.
Обратите внимание, что это отличается от apply
или call
.Оба из них устанавливают контекст и выполнения функции, тогда как bind
устанавливает только контекст без выполнения функции.
Способ jQuery:
jQuery предоставляет метод $.proxy()
, который делает то же самое:
$('span#banner1-nav').click($.proxy(this._onClickNavigation, this));