class

Этот перевод не завершён. Пожалуйста, помогите перевести эту статью с английского

Class declaration создает новый класс с данным именем на основе прототипного наследования.

Можно так же определить класс, используя class expression. Но в отличае от class expression, class declaration не позволяет снова объявить уже существующий класс, это приведёт к ошибке типа.

Синтаксис

class name [extends] {
  // тело класса
}

Описание

Как и class expression, тело class declaration будет исполняться в строгом режиме. Свойство конструктора является опциональным.

Class declaration не поднимается (в отличие от декларируемых функций).

Примеры

Простой class declaration

В следующем примере сначала определяется класс с именем Polygon, затем он наследуется для создания класса Square. Заметьте, что super(), используемый в конструкторе, может быть использован только в конструкторе и должен быть вызван до того, как будет использовано ключевое слово this.

class Polygon {
  constructor(height, width) {
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  }
}

class Square extends Polygon {
  constructor(length) {
    super(length, length);
    this.name = 'Square';
  }
}

Попытка объявить класс дважды

Переопределение класса с помощью class declaration вызовет ошибку типа.

class Foo {};
class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared

Та же ошибка будет вызвана, если класс был определен перед использованием class declaration.

var Foo = class {};
class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared

Спецификации

Спецификация Статус Комментарий
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Class definitions' в этой спецификации.
Стандарт Initial definition.
ECMAScript (ECMA-262)
Определение 'Class definitions' в этой спецификации.
Живой стандарт

Поддержка брузерами

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 42.0 45 (45) ? ? ?
Array subclassing 43.0 Нет ? ? ?
Allowed in sloppy mode 49.0
Feature Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support Нет 42.0 45.0 (45) ? ? ? 42.0
Array subclassing Нет 43.0 Нет ? ? ? 43.0
Allowed in sloppy mode Нет 49.0 49.0

Смотри также