Der class-Ausdruck ist eine Methode eine Klasse in ECMAScript 2015 (ES6) zu definieren. Vergleichbar mit dem function-Ausdruck
kann die class-Anweisung benannt oder unbenannt sein. Ist sie benannt gilt der Name nur lokal im Klassenkörper. JavaScript-Klassen nutzen prototyp-basierte Verärbung.
Syntax
var MyClass = class [className] [extends] { // Klassenkörper };
Beschreibung
Ein class-Ausdruck hat die gleiche Syntax wie die class-Anweisung (Deklaration)
. Jedoch kann mit dem class-Ausdruck der Klassenname ("binding identifier") umgangen werden, was mit der class-Anweisung nicht möglich ist. Zusätzlich ermöglicht ein class-Ausdruck die erneute Deklarierung einer Klasse. ohne dass ein Fehler wie bei der class-Deklaration
auftritt. Die constructor Eigenschaft ist optional. Zudem wird der typeof-Operator bei so deklarierten Klassen immer den Typ "function" zurückgeben.
Genau wie mit class-Anweisungen wird der Körper der Klasse im strict mode
ausgeführt.
'use strict'; var Foo = class {}; // constructor Eigenschaft ist optional var Foo = class {}; // erneute Deklaration is erlaubt typeof Foo; // gibt "function" zurück typeof class {}; // gibt "function" zurück Foo instanceof Object; // true Foo instanceof Function; // true class Foo {}; // erzeugt einen TypeError, weil eine erneute Deklaration nicht erlaubt ist
Beispiele
Ein einfacher Klassenausdruck
Dies ist nur ein einfacher anonymer class-Ausdruck der über die "Foo"-Variable angesprochen werden kann.
var Foo = class { constructor() {} bar() { return "Hello World!"; } }; var instance = new Foo(); instance.bar(); // "Hello World!" Foo.name; // ""
Benannte class-Ausdrücke
Wenn Sie innerhalb des Klassenkörpers auf die aktuelle Klasse verweisen möchten, können Sie einen benannten class-Ausdruck verwenden. Dieser Name ist nur im Bereich der Klasse selbst gültig und sichtbar.
var Foo = class NamedFoo { constructor() {} whoIsThere() { return NamedFoo.name; } } var bar = new Foo(); bar.whoIsThere(); // "NamedFoo" NamedFoo.name; // ReferenceError: NamedFoo is not defined Foo.name; // "NamedFoo"
Spezifikationen
Spezifikation | Status | Kommentar |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Class definitions' in dieser Spezifikation. |
Standard | erstmalige Definition |
ECMAScript 2017 Draft (ECMA-262) Die Definition von 'Class definitions' in dieser Spezifikation. |
Entwurf |
Browserkompatibilität
Funktion | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
grundlegende Unterstützung | 42.0 | 45 (45) | ? | ? | ? |
Funktion | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
grundlegende Unterstützung | Nicht unterstützt | 42.0 | 45 (45) | ? | ? | ? | 42.0 |