@fathergorry

JS выдает разный контекст при разном способе вызова функций, как с этим работать?

Например, есть такой объект
obj = {
    x = [1,2,3],
    y (){  console.log(this.x)  }
   z(){this.y()}
}

Если вызвать obj.y() из кода, x видна.
Если назначить obj.y на обработку слушателем любого события addEventListener(obj.y) , то x становится undefined!
Но если эту же функцию обернуть в еще одну и назначить слушателем на то же самое событие addEventListener(function(){obj.y()}) то x волшебным образом снова появляется.

Далее. this.y() вызванный из z() тоже ведет себя не так как как вызванный снаружи.

Вопрос: с чем именно я столкнулся, это баг или фича языка, как это правильно назвать и как с этим работать?
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
https://developer.mozilla.org/ru/docs/Web/JavaScri...

addEventListener, кстати, может принимать не только функции, но и объекты с методом handleEvent, и в нем this будет указывать на переданный объект
https://developer.mozilla.org/ru/docs/Web/API/Even...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы