class

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2016.

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

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

Синтаксис

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

Описание

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

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

Примеры

Простой class declaration

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

js
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 вызовет ошибку типа. js class Foo {}; class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared Та же ошибка будет вызвана, если класс был определён перед использованием class declaration.

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

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

Specification
ECMAScript® 2025 Language Specification
# sec-class-definitions

Совместимость с браузерами

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
class

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Has more compatibility info.

Смотрите также