Der class-Ausdruck

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

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

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