--- title: Klasse slug: Web/JavaScript/Reference/Statements/class tags: - Deklaration - ECMAScript 2015 - JavaScript - Klasse - Klassen - Ref - Statement translation_of: Web/JavaScript/Reference/Statements/class ---
Sie können eine Klasse auch mit Hilfe einer {{jsxref("Operators/class", "class expression", "", 1)}} definieren. Unglücklicherweise ist es mit diesen class-Ausdrücken nicht möglich eine existierende Klasse erneut zu deklarieren. Dieses führt zu einem TypeError.
class name [extends] { // class body }
Genau wie mit class expressions, wird der body der Klassendeklaration im strict mode ausgeführt. Die constructor Eigenschaft ist optional.
Klassendeklarationen sind nicht {{Glossary("Hoisting", "hoisted")}} (im Gegensatz zu function declarations).
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'; } }
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
Spezifikation | Status | Kommentar |
---|---|---|
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2015')}} | Erste Definition |
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ESDraft')}} |
{{CompatibilityTable}}
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | {{CompatChrome(42.0)}} | {{CompatGeckoDesktop(45)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Array subclassing | {{CompatChrome(43.0)}} | {{CompatNo}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Allowed in sloppy mode | {{CompatChrome(49.0)}} |
Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | {{CompatNo}} | {{CompatChrome(42.0)}} | {{CompatGeckoMobile(45)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatChrome(42.0)}} |
Array subclassing | {{CompatNo}} | {{CompatChrome(43.0)}} | {{CompatNo}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatChrome(43.0)}} |
Allowed in sloppy mode | {{CompatNo}} | {{CompatChrome(49.0)}} | {{CompatChrome(49.0)}} |