The class declaration creates a new class with a given name using prototype-based inheritance.
You can also define a class using a class expression. But unlike the class expression, the class declaration doesn't allow an existing class to be declared again and will throw a type error if attempted.
class name [extends] {
// class body
}
The class body of a class declaration is executed in strict mode. The constructor property is optional.
Class declarations are not hoisted (unlike function declarations).
In the following example, we first define a class named Polygon, then extend it to create a class named Square. Note that super(), used in the constructor, can only be used in constructors and must be called before the this keyword can be used.
class Polygon {
constructor(height, width) {
this.name = 'Polygon';
this.height = height;
this.width = width;
}
}
class Square extends Polygon {
constructor(length) {
super(length, length);
this.name = 'Square';
}
} Re-declaring a class using the class declaration throws a type error.
class Foo {};
class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
The same error is thrown when a class has been defined before using the class expression.
var Foo = class {};
class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
| Desktop | ||||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
| Basic support | 42 | Yes | 45 | No | ? | 10.1 |
| Array subclassing | 43 | ? | ? | No | ? | ? |
| Allowed in sloppy mode | 49 | ? | ? | No | ? | ? |
| Mobile | |||||||
|---|---|---|---|---|---|---|---|
| Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
| Basic support | 42 | 42 | Yes | 45 | ? | 10.1 | 4.0 |
| Array subclassing | 43 | 43 | ? | ? | ? | ? | 4.0 |
| Allowed in sloppy mode | 49 | 49 | ? | ? | ? | ? | 5.0 |
| Server | |
|---|---|
| Node.js | |
| Basic support | 6.0.0 |
| Array subclassing | ? |
| Allowed in sloppy mode | ? |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/class