This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

class

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨март 2017 г.⁩.

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® 2026 Language Specification
# sec-class-definitions

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

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