Восстановление объекта‑контекста после потери this

Создайте привязанную функцию через obj.show.bind(obj). Простое присваивание метода переменной копирует функцию, но не сохраняет объект вызова.

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

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

Создайте привязанную функцию через obj.show.bind(obj). Простое присваивание метода переменной копирует функцию, но не сохраняет объект вызова.

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

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

Условие

Необходимо гарантировать, что метод объекта сохраняет привязку к своему объекту, даже если его передать в отдельную переменную и вызвать оттуда.

const obj = {
  a: 1,
  show(num) {
    if (num !== undefined) {
      console.log(this.a + num);
      return;
    }
    console.log(this.a);
  },
};

const fn = obj.show;
fn();

Ответ

Создайте привязанную функцию через obj.show.bind(obj). Простое присваивание метода переменной копирует функцию, но не сохраняет объект вызова.

const fn = obj.show.bind(obj);
fn();  // 1
fn(5); // 6

bind возвращает новую функцию с фиксированным this и поддерживает последующую передачу аргументов. Альтернатива — обёртка (...args) => obj.show(...args), которая при каждом вызове заново читает obj.show. Это отличие важно, если метод позже заменят. Для разового вызова без создания обёртки можно использовать obj.show.call(obj, 5).

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

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

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

Подробнее