The class declaration creates a new class with a given name using 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.
You can also define a class using a class expression. But unlike a class expression, a class declaration doesn't allow an existing class to be declared again and will throw a SyntaxError if attempted.
Syntax
class name [extends otherName] {
// class body
}
Description
The class body of a class declaration is executed in strict mode. The constructor method is optional.
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';
}
}
Attempting to declare a class twice
Re-declaring a class using the class declaration throws a SyntaxError.
class Foo {};
class Foo {}; // Uncaught SyntaxError: Identifier 'Foo' has already been declared
The same error is thrown when a class has been defined before using the class expression.
let Foo = class {};
class Foo {}; // Uncaught SyntaxError: Identifier 'Foo' has already been declared
Specifications
| Specification |
|---|
| ECMAScript (ECMA-262)The definition of 'Class definitions' in that specification. |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
class
|
Chrome Full support 49 Full support 49 No support 42 — 49 Notes' Strict mode is required. No support 42 — 49 Disabled' From version 42 until version 49 (exclusive): this feature is behind the |
Edge
Full support 13 |
Firefox
Full support 45 |
IE
No support No |
Opera Full support 36 Full support 36 No support 29 — 36 Notes' Strict mode is required. No support 29 — 36 Disabled' From version 29 until version 36 (exclusive): this feature is behind the |
Safari
Full support 10.1 |
WebView Android Full support 49 Full support 49 No support 42 — 49 Notes' Strict mode is required. |
Chrome Android Full support 49 Full support 49 No support 42 — 49 Notes' Strict mode is required. No support 42 — 49 Disabled' From version 42 until version 49 (exclusive): this feature is behind the |
Firefox Android
Full support 45 |
Opera Android Full support 36 Full support 36 No support 29 — 36 Notes' Strict mode is required. No support 29 — 36 Disabled' From version 29 until version 36 (exclusive): this feature is behind the |
Safari iOS
Full support 10.3 |
Samsung Internet Android Full support 5.0 Full support 5.0 No support 4.0 — 5.0 Notes' Strict mode is required. |
nodejs
Full support 6.0.0 |
Legend
- Full support
- Full support
- No support
- No support
- See implementation notes.'
- See implementation notes.
- User must explicitly enable this feature.'
- User must explicitly enable this feature.
See also
class by Mozilla Contributors is licensed under CC-BY-SA 2.5.