Обычный метод прочитает obj.value и вернёт 10. Стрелка возьмёт this из внешней области ES-модуля, где он undefined, и чтение value вызовет ошибку.
Что меняется при замене метода стрелочной функцией
Обычный метод прочитает obj.value и вернёт 10. Стрелка возьмёт this из внешней области ES-модуля, где он undefined, и чтение value вызовет ошибку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Сравните const obj = { value: 10, read() { return this.value; } } с read: () => this.value внутри ES-модуля. Как поведёт себя obj.read()?
Ответ
Обычный метод прочитает obj.value и вернёт 10. Стрелка возьмёт this из внешней области ES-модуля, где он undefined, и чтение value вызовет ошибку.
Стрелки удобны для сохранения внешнего контекста callback, но не являются универсальной заменой метода объекта. Даже call(obj) не переназначит их this. Если требуется независимый от получателя доступ, можно явно замкнуть объект или значение, однако это другой контракт и его следует обозначить.