--- 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)}} |