Как стать автором
Обновить

Комментарии 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"

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории