02. Class Declaration

Синтаксис для классов выглядит так:

class Название [extends Родитель]  {
  constructor() { ... }
  методы
  static методы
}

Определения классов:

  • Класс нельзя вызывать без new, будет ошибка.

  • Объявление класса с точки зрения области видимости ведёт себя как let.

  • Имеют блочную область видимости

  • Не формируют свойство глобального объекта.

  • Не поднимаются.

  • Класс-родитель должен быть объявлен выше.

  • [extends Родитель] - может быть выражением, результатом которого должен быть класс или функция-конструктор.

  • Тело класса может содержать только методы, но не данные.

Причина того, что объявления классов не поднимаются заключается в том, что связь extends может содержать выражения, которые должны выполняться в соответствующее время.

const identity = x => x;

// Here we are in the temporal dead zone of `MyClass`
let inst = new MyClass(); // ReferenceError

// Note the expression in the `extends` clause
class MyClass extends identity(Object) {}

Ограничение на подъем классов не такое радикальное. Можно ссылаться на класс до его объявления, но этот не должен выполняться:

Class expressions

Так же, как и Function Expression, классы можно задавать, в любом выражении и внутри вызова функции. Это называется Class Expression. У класса может быть опциональное имя, доступное только внутри класса:

Last updated

Was this helpful?