Код уже корректен и выводит 1. Обычный метод say получает this === obj, а возвращённая стрелка сохраняет этот контекст при последующем самостоятельном вызове.
Понимание контекста this в методе объекта
Код уже корректен и выводит 1. Обычный метод say получает this === obj, а возвращённая стрелка сохраняет этот контекст при последующем самостоятельном вызове.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо поправить код так, чтобы при запуске в консоль выводилось значение свойства, равное 1, из заданного объекта.
const obj = {
a: 1,
say() {
return () => {
console.log(this.a);
}
}
}
obj.say()();
Ответ
Код уже корректен и выводит 1. Обычный метод say получает this === obj, а возвращённая стрелка сохраняет этот контекст при последующем самостоятельном вызове.
Первый вызов obj.say() создаёт стрелку внутри метода. Стрелочная функция не имеет собственного this, поэтому второй вызов () не меняет захваченное значение. Дополнительный bind не нужен. Если вместо стрелки вернуть обычную функцию, контекст потеряется; если оторвать сам say от obj до первого вызова, его this тоже потребует отдельной привязки.