Почему в стрелочной функции иначе работает this

почему в стрелочной функции, присвоенной свойству func в объекте obj, не виден контекст этого объекта?

const obj = {
    prop: 'Ok',
    func: () => {
        return this.prop;
    }
}

console.log(obj.func()); // TypeError: Cannot read properties of undefined (reading 'prop')
Ответы
Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
25 апреля 2022

Стрелочные функции не имеют своего контекста this, поэтому они сохраняют текущий контекст, в котором были созданы. Не смотря на то, что в примере функция присваивается свойству объекта, само создание функции происходит в момент присваивания, объект в этот момент ещё не создан. Функция привязывается к тому контексту, в котором была создана - это называется "раннее связывание".

Есть и "позднее связывание", где функция привязывается к контексту того объекта, в котором находится. Такие функции создаются с помощью ключевого слова function:

const obj = {
    prop: 'Ok',
    func: function() {
        return this.prop;
    },
};

console.log(obj.func()); // => 'Ok'