Вираз класу

Вираз класу - це один зі способів визначити клас у 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"

Специфікації

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

BCD tables only load in the browser

Див. також