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.
Syntax
class name [extends] {
// class body
}
Description
Just like with class expressions, the class body of a class declaration is executed in strict mode.
Class declarations are not hoisted (unlike function declarations).
Examples
A simple class declaration
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';
}
}
Specifications
| Specification | Status | Comment |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Class definitions' in that specification. |
Standard | Initial definition. |
| ECMAScript 2017 Draft (ECMA-262) The definition of 'Class definitions' in that specification. |
Draft |
Browser compatibility
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | 42.0 | 45 (45) | ? | ? | ? |
| Array subclassing | 43.0 | No support | ? | ? | ? |
| Allowed in sloppy mode | 49.0 |
| Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|
| Basic support | No support | 42.0 | 45.0 (45) | ? | ? | ? | 42.0 |
| Array subclassing | No support | 43.0 | No support | ? | ? | ? | 43.0 |
| Allowed in sloppy mode | No support | 49.0 | 49.0 |