--- 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")}}