class expression
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since маÑÑ 2016 г..
Class expression ÑÑо ÑпоÑоб опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑа в ECMAScript 2015 (ES6). Ð¡Ñ Ð¾Ð¶Ð¸Ð¹ Ñ function expressions, class expressions Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ñм либо не имеÑÑ Ð¸Ð¼ÐµÐ½Ð¸. ÐÑли он именованнÑй, Ñо его Ð¸Ð¼Ñ Ð´Ð¾ÑÑÑпно ÑолÑко внÑÑÑи клаÑÑа. JavaScript клаÑÑÑ Ð¸ÑполÑзÑÑÑ Ð¿ÑоÑоÑипно-оÑиенÑиÑование наÑледование.
СинÑакÑиÑ
var MyClass = class [className] [extends] {
// Ñело клаÑÑа
};
ÐпиÑание
Class expression Ð¸Ð¼ÐµÐµÑ ÑÑ
ожий ÑинÑакÑÐ¸Ñ Ñ class declaration (statement). Ðднако в class expression можно опÑÑÑиÑÑ Ð¸Ð¼Ñ ÐºÐ»Ð°ÑÑа ("binding identifier"), ÑÑо не допÑÑÑимо Ñ class declaration. Также class expression позволÑÐµÑ Ð¿Ð¾Ð²ÑоÑно обÑÑвиÑÑ Ñже ÑÑÑеÑÑвÑÑÑий клаÑÑ Ð¸ ÑÑо не пÑиведÑÑ Ðº оÑибке Ñипа, как пÑи иÑполÑзовании class declaration. СвойÑÑво конÑÑÑÑкÑоÑа ÑвлÑеÑÑÑ Ð¾Ð¿ÑионалÑнÑм. РезÑлÑÑаÑом вÑзова опеÑаÑоÑа typeof на клаÑÑаÑ
, ÑгенеÑиÑованнÑÑ
пÑи помоÑи class expression, вÑегда бÑÐ´ÐµÑ "function".
Так же, как и пÑи иÑполÑзовании class declaration, Ñело клаÑÑа Ñ class expression бÑÐ´ÐµÑ Ð¸ÑполнÑÑÑÑÑ Ð² ÑÑÑогом Ñежиме.
"use strict";
var Foo = class {}; // ÑвойÑÑво конÑÑÑÑкÑоÑа опÑионалÑно
var Foo = class {}; // повÑоÑное обÑÑвление ÑазÑеÑено
typeof Foo; // возвÑаÑÐ°ÐµÑ "function"
typeof class {}; // возвÑаÑÐ°ÐµÑ "function"
Foo instanceof Object; // true
Foo instanceof Function; // true
class Foo {} // Throws TypeError, doesn't allow re-declaration
ÐÑимеÑÑ
>ÐÑоÑÑой class expression
ÐÑоÑÑой анонимнÑй class expression, на коÑоÑÑй можно ÑоÑлаÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÐµÑеменной "Foo".
var Foo = class {
constructor() {}
bar() {
return "Hello World!";
}
};
var instance = new Foo();
instance.bar(); // "Hello World!"
Foo.name; // "Foo"
ÐменованнÑй class expression
ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе ÑоÑлаÑÑÑÑ Ð½Ð° конкÑеÑнÑй клаÑÑ Ð²Ð½ÑÑÑи Ñела клаÑÑа, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ñй class expression. ÐÑо Ð¸Ð¼Ñ Ð±ÑÐ´ÐµÑ Ð´Ð¾ÑÑÑпно ÑолÑко внÑÑÑи облаÑÑи видимоÑÑи Ñамого class expression.
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"
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-class-definitions> |