Комментарии 6
Как и всегда в таких статьях, классовые стрелочные функции остались за бортом...
А что вы подразумеваете под классовыми стрелочными функциями?
Если код, транслируемый в последствии плагином babel/plugin-transform-class-properties, вроде этого:
class Foo {
name = 'foo';
getName = () => this.name;
}
То тут всё просто. На нативном JS запись эквивалентна:
class Foo {
constructor() {
this.name = 'foo';
this.getName = () => this.name;
}
}
Контекстом выполнения конструктора, является создаваемый инстанс класса. Это мы знаем из принципа работы оператора new.
Стрелочная функция определяется в конструкторе, в момент его вызова и получает его контекст
Шото я не понял: каким макаром в примере с (false && person.foo)() не будет ошибки, а false && peson.foo() будет какой-то this ?
Интерпретатор увидит false && и вообще не будет исполнять правую часть, а сразу отдаст результат false - разве нет?
В компанию "three things you can watch forever" можно уже смело добавлять вещь четвёртую: "Как окончательно разбираются с this в JS"
Разбираемся с this в JavaScript раз и навсегда (но это не точно)