We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

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

Объявление class создает новый класс с данным именем на основе прототипного наследования.

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

Синтаксис

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

Описание

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

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

Примеры

Простое объявление класса

В следующем примере сначала определяется класс с именем 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 Foo {};
class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared

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

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

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

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

Смотри так же

Метки документа и участники

Внесли вклад в эту страницу: curdwithraisins
Обновлялась последний раз: curdwithraisins,