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 (ECMA-262)
The definition of 'Class definitions' in that specification.
Living Standard

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
classChrome Full support 49
Full support 49
No support 42 — 49
Notes
Notes Strict mode is required.
No support 42 — 49
Disabled
Disabled From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Full support 13Firefox Full support 45IE No support NoOpera Full support 36
Full support 36
No support 29 — 36
Notes
Notes Strict mode is required.
No support 29 — 36
Disabled
Disabled From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari Full support 10.1WebView Android Full support 49
Full support 49
No support 42 — 49
Notes
Notes Strict mode is required.
Chrome Android Full support 49
Full support 49
No support 42 — 49
Notes
Notes Strict mode is required.
No support 42 — 49
Disabled
Disabled From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Firefox Android Full support 45Opera Android Full support 36
Full support 36
No support 29 — 36
Notes
Notes Strict mode is required.
No support 29 — 36
Disabled
Disabled From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari iOS Full support 10.3Samsung Internet Android Full support 5.0
Full support 5.0
No support 4.0 — 5.0
Notes
Notes Strict mode is required.
nodejs Full support 6.0.0

Legend

Full support  
Full support
No support  
No support
See implementation notes.
See implementation notes.
User must explicitly enable this feature.
User must explicitly enable this feature.

Див. також