Контекст теряется при присваивании метода переменной

Сохраните связанную функцию: const fn = obj.say.bind(obj). bind закрепляет this, поэтому отдельный вызов fn() прочитает obj.a и выведет 1.

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

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

Сохраните связанную функцию: const fn = obj.say.bind(obj). bind закрепляет this, поэтому отдельный вызов fn() прочитает obj.a и выведет 1.

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

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

Условие

Необходимо исправить код так, чтобы при вызове функции fn() сохранялся правильный контекст объекта obj и в консоль выводилось значение 1.

const obj = {
  a: 1,
  say() {
    console.log(this.a);
  }
};

const fn = obj.say;
fn();

Ответ

Сохраните связанную функцию: const fn = obj.say.bind(obj). bind закрепляет this, поэтому отдельный вызов fn() прочитает obj.a и выведет 1.

const fn = obj.say.bind(obj);
fn(); // 1

Само присваивание obj.say не запоминает объект, из которого взят метод. Другой вариант — const fn = () => obj.say(), сохраняющий вызов через точку. Для разового обращения подойдёт obj.say.call(obj). Если функция передаётся в обработчик события или таймер, связанную версию можно передать напрямую.

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

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

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

Подробнее