Это распространенная ошибка в JavaScript.
Вы добавляете прослушиватель событий в window
, поэтому окно вызывает функцию, в результате чего this
внутри функции устанавливается на window
.
this
никогда не ссылается на внешнюю область видимости в JavaScript, даже если вы вызываете обычную функцию, например foo()
, внутри другой функции, this
внутри foo
по умолчанию будет глобальным объектом.
Если вы хотите получить доступ к внешнему this
, вам нужно сохранить ссылку на него:
someObject.method = function() {
var that = this;
function test() {
that; // refers to someObject
this; // refers to window
}
test();
}
Для обзора возможных значений и ошибок this
, возьмитевзгляд здесь .