После извлечения метода вызов 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). Само присваивание без вызова ничего не выводит.