Обнаружить и исправить ошибку в JavaScript‑методе объекта

Callback setTimeout — обычная функция и не наследует this метода speak. Замените его стрелкой, чтобы через секунду прочитать number у исходного объекта.

Короткий ответ

Что ответить на собеседовании

Callback setTimeout — обычная функция и не наследует this метода speak. Замените его стрелкой, чтобы через секунду прочитать number у исходного объекта.

Подробный разбор

Ответ с пояснениями

Условие

Найдите и устраните проблему в следующем фрагменте кода на JavaScript:

 const data = {
    number: 42,
    speak: function () {
        setTimeout(function () {
            console.log(this.number);
        }, 1000);
    }
}

data.speak();

Ответ

Callback setTimeout — обычная функция и не наследует this метода speak. Замените его стрелкой, чтобы через секунду прочитать number у исходного объекта.

const data = {
  number: 42,
  speak() {
    setTimeout(() => console.log(this.number), 1000);
  }
};
data.speak(); // 42 после задержки

Стрелка захватывает this текущего вызова speak. Альтернатива — bind(this) у callback. Конкретный this обычного timer-callback зависит от среды, но не равен data автоматически. Если отдельно оторвать speak от объекта, потребуется привязать и сам внешний метод.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее