Sie können eine Klasse auch mit Hilfe einer class expression definieren. Unglücklicherweise ist es mit diesen class-Ausdrücken nicht möglich eine existierende Klasse erneut zu deklarieren. Dieses fürht zu einem TypeError.
Syntax
class name [extends] { // class body }
Beschreibung
Genau wie mit class expressions, wird der body der Klassendeklaration im strict mode ausgeführt. Die constructor Eigenschaft ist optional.
Klassendeklarationen sind nicht hoisted (im Gegensatz zu function declarations).
Beispiele
Eine einfache Klassendeklaration
Im folgenden Beispiel definieren wir zuerst eine Klasse mit dem Namen Polygon. Diese wird danach erweitert, um eine Klasse mit dem Namen Square zu erstellen. Beachten Sie, dass die Anweisung super()
nur im Konstruktor verwendet werden kann und vor dem this
Schlüsselwort verwendet werden kann.
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'; } }
Versuch eine Klasse zweimal zu deklarieren
Neudeklarieren einer Klasse unter Einsatz von Klassendeklarationen führt zu einem TypeError.
class Foo {}; class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
Der gleiche Fehler tritt auch auf, wenn eine Klasse zuvor mit einem class-Ausdruck definiert wurde.
var Foo = class {}; class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
Spezifikationen
Spezifikation | Status | Kommentar |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Class definitions' in dieser Spezifikation. |
Standard | Erste Definition |
ECMAScript 2017 Draft (ECMA-262) Die Definition von 'Class definitions' in dieser Spezifikation. |
Entwurf |
Browserkompatibilität
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 42.0 | 45 (45) | ? | ? | ? |
Array subclassing | 43.0 | Nicht unterstützt | ? | ? | ? |
Allowed in sloppy mode | 49.0 |
Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | Nicht unterstützt | 42.0 | 45.0 (45) | ? | ? | ? | 42.0 |
Array subclassing | Nicht unterstützt | 43.0 | Nicht unterstützt | ? | ? | ? | 43.0 |
Allowed in sloppy mode | Nicht unterstützt | 49.0 | 49.0 |