Klassenausdruck
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2016.
Das class
Schlüsselwort kann verwendet werden, um eine Klasse innerhalb eines Ausdrucks zu definieren.
Sie können Klassen auch mithilfe der class
Deklaration definieren.
Probieren Sie es aus
Syntax
class {
// class body
}
class name {
// class body
}
Hinweis: Eine Ausdruckanweisung kann nicht mit dem Schlüsselwort class
beginnen, um Verwechslungen mit einer class
Deklaration zu vermeiden. Das class
Schlüsselwort leitet nur einen Ausdruck ein, wenn es in einem Kontext erscheint, der keine Anweisungen akzeptieren kann.
Beschreibung
Ein class
Ausdruck ist dem class
Deklaration sehr ähnlich und hat fast die gleiche Syntax. Wie bei class
Deklarationen wird der Körper eines class
Ausdrucks im strikten Modus ausgeführt. Der Hauptunterschied zwischen einem class
Ausdruck und einer class
Deklaration ist der Klassenname, der in class
Ausdrücken weggelassen werden kann, um anonyme Klassen zu erstellen. Klassenausdrücke ermöglichen es Ihnen, Klassen neu zu definieren, während das erneute Deklarieren einer Klasse mit class
Deklarationen einen SyntaxError
auslöst. Siehe auch das Kapitel über Klassen für weitere Informationen.
Beispiele
Ein einfacher Klassenausdruck
Dies ist nur ein anonymer Klassenausdruck, auf den Sie mit der Variablen Foo
zugreifen können.
const Foo = class {
constructor() {}
bar() {
return "Hello World!";
}
};
const instance = new Foo();
instance.bar(); // "Hello World!"
Foo.name; // "Foo"
Benannte Klassenausdrücke
Wenn Sie innerhalb des Klassenkörpers auf die aktuelle Klasse verweisen möchten, können Sie einen benannten Klassenausdruck erstellen. Der Name ist nur im Gültigkeitsbereich des Klassenausdrucks selbst sichtbar.
const Foo = class NamedFoo {
constructor() {}
whoIsThere() {
return NamedFoo.name;
}
};
const bar = new Foo();
bar.whoIsThere(); // "NamedFoo"
NamedFoo.name; // ReferenceError: NamedFoo is not defined
Foo.name; // "NamedFoo"
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-class-definitions |
Browser-Kompatibilität
BCD tables only load in the browser