Привяжите метод к data через bind: const fn = data.display.bind(data). Тогда самостоятельный вызов fn() сохранит this === data и выведет 1.
Сохранение контекста метода при вызове через отдельную переменную
Привяжите метод к data через bind: const fn = data.display.bind(data). Тогда самостоятельный вызов fn() сохранит this === data и выведет 1.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо поправить код так, чтобы в консоль было выведено значение 1.
const data = {
value: 1,
display() {
console.log(this.value)
}
}
const fn = data.display;
fn();
Ответ
Привяжите метод к data через bind: const fn = data.display.bind(data). Тогда самостоятельный вызов fn() сохранит this === data и выведет 1.
const fn = data.display.bind(data);
fn(); // 1
Альтернатива — обёртка const fn = () => data.display() или явный вызов data.display.call(data). При простом присваивании метода связь с объектом не сохраняется: this определяется способом вызова, а не местом объявления функции. bind создаёт новую функцию с закреплённым контекстом.