В моем понимании стрелочная функция берет контекст при объявлении
Не совсем при объявлении, скорее при
создании.(хотя это одно и тоже, но так меньше непонимания, имхо)
Соответственно при создании нового экземпляра класса объявляется(создаётся) новая стрелочная функция в контексте этого экземпляра. По сути это просто свойство, уникальное для каждого экземпляра, в отличие от метода, который один для всех.
class Car{
constructor() {
this.name = "BMW"
}
showname = () => {
console.log(this.name);
}
}
let { showname } = new Car();
let obj = {
name: 'random',
showname
}
obj.showname() // всё равно BMW
Вообще все
свойства в классе объявляются(создаются) в контексте экземпляра:
class Car {
storedThis = this
}
const car = new Car();
const { storedThis } = car;
car === storedThis; // true
После же того как они были созданы они живут обычной жизнью.