Как замена getName стрелкой меняет три вызова?

Обычный метод возвращает inner, other, bound; стрелочный вариант — outer во всех трёх случаях. Стрелка берёт this из выполнения make, а не из объекта, в котором сохранена.

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

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

Обычный метод возвращает inner, other, bound; стрелочный вариант — outer во всех трёх случаях. Стрелка берёт this из выполнения make, а не из объекта, в котором сохранена.

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

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

Условие

Сравните два объекта, созданных внутри function make(){ ... }, вызываемой через make.call({name:'outer'}). Первый возвращает {name:'inner', getName(){return this.name;}}, второй — {name:'inner', getName:()=>this.name}. Для каждого выполните obj.getName(), obj.getName.call({name:'other'}) и obj.getName.bind({name:'bound'})().

Ответ

Обычный метод возвращает inner, other, bound; стрелочный вариант — outer во всех трёх случаях. Стрелка берёт this из выполнения make, а не из объекта, в котором сохранена.

Это различие проявляется даже без таймеров и отделения метода. Объектный литерал не создаёт собственного лексического this. Для функции, предназначенной быть методом с меняющимся получателем, обычный метод сохраняет этот контракт. Если нужен постоянный контекст фабрики, стрелка выражает его явно, но такое изменение нельзя считать чисто стилистическим.

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

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

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

Подробнее