Задать вопрос
PavelScron
@PavelScron

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

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

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

setTimeout(user.sayHi, 1000); // undefined
  • Вопрос задан
  • 238 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
Потому что контекст не сохраняется, в setTimeout вызывается функция с глобальным контекстом. Варианты решения:
Забиндить контекст:
setTimeout(user.sayHi.bind(user), 1000);
Или же вызвать в анонимной функции
setTimeout(() => user.sayHi(), 1000);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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