Сохранение контекста метода при вызове через отдельную переменную

Привяжите метод к 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 создаёт новую функцию с закреплённым контекстом.

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

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

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

Подробнее