Утрата контекста при передаче функции‑метода объекта

После извлечения метода вызов fun() не получает this объекта user. Обычно возникнет TypeError при обращении к this.roles или попытке вызвать map у отсутствующего roles.

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

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

После извлечения метода вызов fun() не получает this объекта user. Обычно возникнет TypeError при обращении к this.roles или попытке вызвать map у отсутствующего roles.

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

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

Условие

Какой вывод появится в консоли, если вызвать функцию fun() после того, как метод getRoles был вынут из объекта?

const user = {
  name: "Bob",
  roles: ["friend", "brother", "student"],
  getRoles: function () {
    return this.roles.map((role) => {
      return this.name + " is " + role;
    });
  }
};

const fun = user.getRoles;

Ответ

После извлечения метода вызов fun() не получает this объекта user. Обычно возникнет TypeError при обращении к this.roles или попытке вызвать map у отсутствующего roles.

В strict mode this будет undefined; в нестрогой среде возможен глобальный объект с другими свойствами. Стрелка внутри map сохраняет this getRoles, но не восстанавливает уже потерянный контекст. Исправьте на const fun = user.getRoles.bind(user). Само присваивание без вызова ничего не выводит.

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

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

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

Подробнее