PavelScron
@PavelScron

Передача методов объектов в параметры функции?

Почему когда мы передаем метод объекта как аргумент, то он не видит свой контекст(scope)?

var user = {
  firstName: "Вася",
  sayHi: function() {
    alert( this.firstName );
  }
};

setTimeout(user.sayHi, 1000); // undefined
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
Потому что контекст не сохраняется, в setTimeout вызывается функция с глобальным контекстом. Варианты решения:
Забиндить контекст:
setTimeout(user.sayHi.bind(user), 1000);
Или же вызвать в анонимной функции
setTimeout(() => user.sayHi(), 1000);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы