Start · Sprachen · JavaScript · Referenz · class

class

Anweisung

Die <code>class</code>-Deklaration erstellt ein Binding einer neuen Klasse an einen gegebenen Namen.

seit JavaScript ES2015 Kategorie: syntax

Signatur

class name { /* class body */ } / class name extends otherName { /* class body */ }

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 werden class-Deklarationen üblicherweise als nicht-hoisted betrachtet (im Gegensatz zu Funktionsdeklarationen).
  • class-Deklarationen erzeugen keine Eigenschaften auf globalThis, 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

Typ
void
Beschreibung
Eine Klassendeklaration gibt keinen Wert zurück; sie erzeugt eine Bindung im aktuellen Gültigkeitsbereich. Ein Klassenausdruck hingegen ergibt die Klasse als Wert.

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

Im Beispiel zur Klassendeklaration ist zu beachten, dass super(), das im constructor verwendet wird, nur in Konstruktoren verwendet werden kann und aufgerufen werden muss, bevor das Schlüsselwort this verwendet werden kann.