Callback setTimeout — обычная функция и не наследует this метода speak. Замените его стрелкой, чтобы через секунду прочитать number у исходного объекта.
Обнаружить и исправить ошибку в JavaScript‑методе объекта
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 от объекта, потребуется привязать и сам внешний метод.