Вывод: Анна, Ольга, undefined. До извлечения метода выполните user.getName = user.getName.bind(user), чтобы read сохранил получателя.
Контекст обычного, привязанного и извлечённого метода
Вывод: Анна, Ольга, undefined. До извлечения метода выполните user.getName = user.getName.bind(user), чтобы read сохранил получателя.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В строгом режиме:
const user = { name: 'Анна', getName() { return this?.name; } };
console.log(user.getName());
console.log(user.getName.call({ name: 'Ольга' }));
const read = user.getName;
console.log(read());
Что выведется и как заранее закрепить Анну для read?
Ответ
Вывод: Анна, Ольга, undefined. До извлечения метода выполните user.getName = user.getName.bind(user), чтобы read сохранил получателя.
Обычная функция получает this из способа вызова. Optional chaining здесь предотвращает исключение при undefined. Привязку следует делать после демонстрационного вызова call, если ожидается именно приведённый вывод первых двух строк: bound-функция уже игнорирует попытку заменить this через call. Саму строку read() менять не требуется.