Signatur
Beschreibung
Die class-Deklaration erstellt ein Binding einer neuen Klasse an einen gegebenen Namen.
Klassen lassen sich auch mit dem class-Ausdruck definieren.
Der Klassenkörper einer Klassendeklaration wird im strict mode ausgeführt. Die class-Deklaration ist der Anweisung let sehr ähnlich:
class-Deklarationen sind auf Blöcke sowie auf Funktionen gescoped.- Auf
class-Deklarationen kann erst nach dem Erreichen der Deklarationsstelle zugegriffen werden (siehe temporal dead zone). Aus diesem Grund werdenclass-Deklarationen üblicherweise als nicht-hoisted betrachtet (im Gegensatz zu Funktionsdeklarationen). class-Deklarationen erzeugen keine Eigenschaften aufglobalThis, wenn sie auf der obersten Ebene eines Skripts deklariert werden (im Gegensatz zu Funktionsdeklarationen).class-Deklarationen können nicht durch eine andere Deklaration im selben Scope erneut deklariert werden.
Außerhalb des Klassenkörpers können class-Deklarationen wie let neu zugewiesen werden, dies sollte jedoch vermieden werden. Innerhalb des Klassenkörpers ist das Binding konstant wie bei const.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ClassName Pflicht | string | Der Name der Klasse. Bei einer Klassendeklaration obligatorisch; bei einem Klassenausdruck (const X = class { }) optional. |
|
| $ParentClass | class|function | Optionale Elternklasse, von der geerbt werden soll. Wird mit extends angegeben. Muss eine konstruierbare Funktion oder null sein. |
Rückgabewert
Beispiele
Neuzuweisungs-Verhalten des class-Bindings
class Foo {
static {
Foo = 1; // TypeError: Assignment to constant variable.
}
}
class Foo2 {
bar = (Foo2 = 1); // TypeError: Assignment to constant variable.
}
class Foo3 {}
Foo3 = 1;
console.log(Foo3); // 1
Eine Klassendeklaration
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;
}
}
// Wichtig · Fallstricke
super(), das im constructor verwendet wird, nur in Konstruktoren verwendet werden kann und aufgerufen werden muss, bevor das Schlüsselwort this verwendet werden kann.