--- title: Der class-Ausdruck slug: Web/JavaScript/Reference/Operators/class tags: - Classes - ECMAScript 2015 - Expression - JavaScript - Operator - Reference translation_of: Web/JavaScript/Reference/Operators/class ---
Der class-Ausdruck ist eine Methode zur Definition einer Klasse in ECMAScript 2015. Ähnlich wie beim {{jsxref("Operators/function", "function-Ausdruck")}} kann der class-Ausdruck benannt oder unbenannt sein. Ist er benannt, so gilt der Name nur lokal im Klassenkörper. JavaScript-Klassen nutzen prototyp-basierte Vererbung.
var MyClass = class [className] [extends] {
// Klassenkörper
};
Ein class-Ausdruck hat die gleiche Syntax wie die {{jsxref("Statements/class", "class-Anweisung (Deklaration)")}}. Jedoch kann mit dem class-Ausdruck der Klassenname ("binding identifier") ausgelassen werden, was mit der class-Anweisung nicht möglich ist. Zusätzlich erlaubt ein class-Ausdruck das erneute Deklarieren einer Klasse, ohne dass ein Fehler wie bei der {{jsxref("Statements/class", "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 {{jsxref("Strict_mode", "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
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; // ""
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"
| Spezifikation | Status | Kommentar |
|---|---|---|
| {{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2015')}} | erstmalige Definition |
| {{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ESDraft')}} |
{{CompatibilityTable}}
| Funktion | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| grundlegende Unterstützung | {{CompatChrome(42.0)}} | {{CompatGeckoDesktop(45)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
| Funktion | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|
| grundlegende Unterstützung | {{CompatNo}} | {{CompatChrome(42.0)}} | {{CompatGeckoDesktop(45)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatChrome(42.0)}} |