--- title: Вираз класу slug: Web/JavaScript/Reference/Operators/class tags: - ECMAScript 2015 - JavaScript - Класи - Оператор - вираз translation_of: Web/JavaScript/Reference/Operators/class ---
Вираз класу - це один зі способів визначити клас у ECMAScript 2015. Схоже до функціональних виразів, вирази класів можуть бути іменовані або неіменовані. У іменованих ім'я класу є локальним для використання тільки у тілі класу. Класи JavaScript використовують прототипне наслідування.
var MyClass = class [className] [extends] { // тіло класу };
Вираз класу має синтаксис, подібний до синтаксису оголошення (оператору) класу. Однак, у виразі класу ви можете опустити ім'я класу ("зв'язуючий ідентифікатор"), чого не можна зробити у оголошенні класу. Додатково, вираз класу дозволяє перевизначити/переоголосити клас та не викинути жодних помилок типу, як у оголошенні класу. Конструктор є необов'язковою властивістю. А результатом typeof для класів, створених за допомогою ключового слова, завжди буде "function".
Як і у оголошенні класу, тіло класу у виразі класу виконується у строгому режимі.
'use strict'; var Foo = class {}; // конструктор є необов'язковою властивістю var Foo = class {}; // дозволяється перевизначення typeof Foo; //вертає "function" typeof class {}; //вертає "function" Foo instanceof Object; // true Foo instanceof Function; // true class Foo {}; // Викидає TypeError, не дозволяє перевизначення
Це простий анонімний вираз класу, на який можна посилатись через змінну "Foo".
var Foo = class { constructor() {} bar() { return 'Привіт!'; } }; var instance = new Foo(); instance.bar(); // "Привіт!" Foo.name; // "Foo"
Якщо ви бажаєте звертатись до поточного класу всередині тіла класу, ви можете створити іменований вираз класу. Це ім'я видиме тільки в області видимості самого виразу класу.
var Foo = class NamedFoo { constructor() {} whoIsThere() { return NamedFoo.name; } } var bar = new Foo(); bar.whoIsThere(); // "NamedFoo" NamedFoo.name; // ReferenceError: NamedFoo is not defined Foo.name; // "NamedFoo"
Специфікація | Статус | Коментар |
---|---|---|
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2015')}} | Початкове визначення. |
{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2016')}} | |
{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2017')}} | |
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.operators.class")}}