Klasse

Die Klassendeklaration erstellt eine neue Klasse mit einem Namen unter Verwendung von prototypen Vererbung.
 

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

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

 Mitwirkende an dieser Seite: schlagi123, eluchsinger
 Zuletzt aktualisiert von: schlagi123,