class expression is one way to define a class in ECMAScript 2015. Similar to function expressions , class expressions can be named or unnamed. If named, the name of the class is local to the class body only.
JavaScript classes use prototype-based inheritance.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
const MyClass = class [className] [extends otherClassName] {
// class body
};
A class expression has a similar syntax to a
class declaration (statement)
. As with
class
statements, the body of a
class
expression is executed in
严格模式
.
There are several differences between class expressions and class statements , however:
SyntaxError
. This is not the case with
class statements
.
构造函数
method is optional. Classes generated with class expressions will always respond to
typeof
with the value "
function
".
'use strict';
let Foo = class {}; // constructor property is optional
Foo = class {}; // Re-declaration is allowed
typeof Foo; // returns "function"
typeof class {}; // returns "function"
Foo instanceof Object; // true
Foo instanceof Function; // true
class Foo {} // Throws SyntaxError (class declarations do not allow re-declaration)
This is just a simple anonymous class expression which you can refer to using the variable
Foo
.
const Foo = class {
constructor() {}
bar() {
return 'Hello World!';
}
};
const instance = new Foo();
instance.bar(); // "Hello World!"
Foo.name; // "Foo"
If you want to refer to the current class inside the class body, you can create a named class expression . The name is only visible within the scope of the class expression itself.
const Foo = class NamedFoo {
constructor() {}
whoIsThere() {
return NamedFoo.name;
}
}
const bar = new Foo();
bar.whoIsThere(); // "NamedFoo"
NamedFoo.name; // ReferenceError: NamedFoo is not defined
Foo.name; // "NamedFoo"
| 规范 |
|---|
|
ECMAScript (ECMA-262)
The definition of 'Class definitions' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
class
|
Chrome 42 | Edge 13 | Firefox 45 | IE No | Opera 29 | Safari 7 | WebView Android 42 | Chrome Android 42 | Firefox Android 45 | Opera Android 29 | Safari iOS 7 | Samsung Internet Android 4.0 |
nodejs
6.0.0
|
完整支持
不支持
用户必须明确启用此特征。