class

Оголошення класу створює новий клас із заданим ім'ям, на основі прототипного наслідування.

Ви також можете визначити клас, використовуючи вираз класу. Але, на відміну від виразу класу, оголошення класу не дозволяє повторне оголошення існуючого класу і викине помилку при спробі це зробити. 

Синтаксис

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

Опис

Тіло класу у оголошенні класу виконується у строгому режимі. Властивість constructor є необов'язковою.

Оголошення класу не виринають (на відміну від оголошення функцій).

Приклади

Просте оголошення класу

У наступному прикладі ми спочатку визначаємо клас на ім'я 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 SyntaxError: 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)
The definition of 'Class definitions' in that specification.
Standard Початкове визначення.
ECMAScript 2016 (ECMA-262)
The definition of 'Class definitions' in that specification.
Standard
ECMAScript 2017 (ECMA-262)
The definition of 'Class definitions' in that specification.
Standard
ECMAScript Latest Draft (ECMA-262)
The definition of 'Class definitions' in that specification.
Draft

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
classChrome Full support 49
Notes
Full support 49
Notes
Notes From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".
Edge Full support YesFirefox Full support 45IE No support NoOpera Full support 36Safari Full support 10.1WebView Android Full support 49
Notes
Full support 49
Notes
Notes From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".
Chrome Android Full support 49
Notes
Full support 49
Notes
Notes From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".
Firefox Android Full support 45Opera Android ? Safari iOS Full support 10.1Samsung Internet Android Full support 4.0nodejs Full support 6.0.0

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
See implementation notes.
See implementation notes.

Див. також