На learn.javascript, например, неплохо
написали:
Стрелка =>
ничего не привязывает. У функции просто нет this
.
При получении значения this
– оно, как обычная переменная, берётся из внешнего лексического окружения.
В вашем примере с литералом объекта можно добавить для понимания:
const obj = {
w() {
console.log('w', this);
},
x: function () {
console.log('x', this);
},
y: this,
z: () => {
console.log('z', this);
},
};
obj.w(); // obj
obj.x(); // obj
console.log('y', obj.y); // Window
obj.z(); // Window
Запись литерала объекта не создаёт свой контекст: на момент записи
this
тот же, что и снаружи:
const a = this; // Window
const obj = {
b: this, // тоже Window
}
a === obj.b // true