The class declaration creates a new class with a given name using prototype-based inheritance.
class
Try it
You can also define a class using a class expression, which allows redeclarations and omitting class names. Attempting to place class declaration in the same scope, under the same name, will throw a SyntaxError
.
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 Rectangle
, then extend it to create a class named FilledRectangle
.
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 Rectangle { constructor(height, width) { this.name = 'Rectangle'; this.height = height; this.width = width; } } class FilledRectangle extends Rectangle { constructor(height, width, color) { super(height, width); this.name = 'Filled rectangle'; this.color = color; } }
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
Browser compatibility
Desktop | Mobile | Server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | Deno | Node.js | |
class |
49
42-49
Strict mode is required.
|
13
|
45
|
No
|
36
29-36
Strict mode is required.
|
10.1
|
49
42-49
Strict mode is required.
|
49
42-49
Strict mode is required.
|
45
|
36
29-36
Strict mode is required.
|
10.3
|
5.0
4.0-5.0
Strict mode is required.
|
1.0
|
6.0.0
|
See also
© 2005–2022 MDN 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