Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Der new Operator ermöglicht es Entwicklern, eine Instanz eines benutzerdefinierten Objekttyps oder eines der integrierten Objekttypen zu erstellen, die eine Konstruktorfunktion besitzen.
Eine Klasse oder Funktion, die den Typ der Objektinstanz angibt. Der Ausdruck kann alles mit ausreichender Priorität sein, einschließlich eines Identifikators, eines Eigenschaftszugriffs oder eines weiteren new Ausdrucks, aber Optionale Verkettung ist nicht erlaubt.
arg1, arg2, …, argNEine Liste von Werten, mit denen der constructor aufgerufen wird. new Foo ist äquivalent zu new Foo(), d.h. wenn keine Argumentenliste angegeben wird, wird Foo ohne Argumente aufgerufen.
Wenn eine Funktion mit dem new Schlüsselwort aufgerufen wird, wird die Funktion als Konstruktor verwendet. new führt die folgenden Schritte aus:
Erstellt ein leeres, einfaches JavaScript-Objekt. Der Einfachheit halber nennen wir es newInstance.
Setzt newInstance's [[Prototype]] auf die prototype-Eigenschaft der Konstruktorfunktion, falls das prototype ein Object ist. Andernfalls bleibt newInstance ein einfaches Objekt mit Object.prototype als seinem [[Prototype]].
Hinweis: Eigenschaften/Objekte, die der prototype-Eigenschaft der Konstruktorfunktion hinzugefügt werden, sind daher für alle Instanzen zugänglich, die aus der Konstruktorfunktion erstellt wurden.
Führt die Konstruktorfunktion mit den gegebenen Argumenten aus und bindet newInstance als this Kontext (d.h. alle Verweise auf this in der Konstruktorfunktion beziehen sich jetzt auf newInstance).
Wenn die Konstruktorfunktion einen nicht-primitiven Wert zurückgibt, wird dieser Rückgabewert das Ergebnis des gesamten new Ausdrucks. Andernfalls, wenn die Konstruktorfunktion nichts zurückgibt oder einen primitiven Wert zurückgibt, wird newInstance stattdessen zurückgegeben. (Normalerweise geben Konstruktoren keinen Wert zurück, aber sie können dies tun, um den normalen Objekt-Erstellungsprozess zu überschreiben.)
Klassen können nur mit dem new Operator instanziiert werden — der Versuch, eine Klasse ohne new aufzurufen, führt zu einem TypeError.
Das Erstellen eines Objekts mit einer benutzerdefinierten Konstruktorfunktion erfordert zwei Schritte:
Den Objekttyp definieren, indem eine Funktion geschrieben wird, die seinen Namen und seine Eigenschaften angibt. Zum Beispiel könnte eine Konstruktorfunktion, um ein Objekt Foo zu erstellen, folgendermaßen aussehen:
Eine Instanz des Objekts mit new erstellen.
Hinweis: Ein Objekt kann eine Eigenschaft haben, die selbst ein anderes Objekt ist. Siehe die Beispiele unten.
Sie können einem zuvor definierten Objekt immer eine Eigenschaft hinzufügen. Zum Beispiel fügt die Anweisung car1.color = "black" eine Eigenschaft color zu car1 hinzu und weist ihr den Wert "black" zu.
Dies beeinflusst jedoch keine anderen Objekte. Um die neue Eigenschaft zu allen Objekten des gleichen Typs hinzuzufügen, müssen Sie die Eigenschaft zur prototype-Eigenschaft des Konstruktors hinzufügen. Dies definiert eine Eigenschaft, die von allen mit dieser Funktion erstellten Objekten geteilt wird, anstatt nur von einer Instanz des Objekttyps. Der folgende Code fügt eine color Eigenschaft mit dem Wert "original color" zu allen Objekten des Typs Car hinzu und überschreibt dann diesen Wert nur im Instanzobjekt car1 mit dem String "black". Für weitere Informationen siehe prototype.
Hinweis: Während die Konstruktorfunktion wie jede andere Funktion aufgerufen werden kann (d.h. ohne den new Operator), wird in diesem Fall kein neues Objekt erstellt und der Wert von this ist ebenfalls unterschiedlich.
Eine Funktion kann erkennen, ob sie mit new aufgerufen wurde, indem sie new.target überprüft. new.target ist nur undefined, wenn die Funktion ohne new aufgerufen wird. Zum Beispiel können Sie eine Funktion haben, die sich unterschiedlich verhält, je nachdem, ob sie aufgerufen oder konstruiert wird:
Vor ES6, das Klassen eingeführt hat, sind die meisten JavaScript-Built-ins sowohl aufrufbar als auch konstruierbar, obwohl viele von ihnen unterschiedliche Verhaltensweisen zeigen. Einige Beispiele:
Nach ES6 ist die Sprache strenger darüber, welche Konstruktoren und welche Funktionen sind. Zum Beispiel:
Angenommen, Sie möchten einen Objekttyp für Autos erstellen. Sie möchten, dass dieser Objekttyp Car genannt wird, und er soll Eigenschaften für Marke, Modell und Jahr haben. Um dies zu tun, würden Sie die folgende Funktion schreiben:
Nun können Sie ein Objekt namens myCar wie folgt erstellen:
Diese Anweisung erstellt myCar und weist ihm die angegebenen Werte für seine Eigenschaften zu. Dann ist der Wert von myCar.make der String "Eagle", myCar.year ist der Integer 1993 und so weiter.
Sie können beliebig viele car Objekte durch Aufrufe von new erstellen. Zum Beispiel:
Angenommen, Sie definieren ein Objekt namens Person wie folgt:
Und instanziieren dann zwei neue Person Objekte wie folgt:
Dann können Sie die Definition von Car um eine owner Eigenschaft erweitern, die ein Person Objekt übernimmt, wie folgt:
Um die neuen Objekte zu instanziieren, verwenden Sie dann Folgendes:
Anstelle eines literalen Strings oder Integer-Werts bei der Erstellung der neuen Objekte übergeben die obigen Anweisungen die Objekte rand und ken als Parameter für die Eigentümer. Um den Namen des Eigentümers von car2 herauszufinden, können Sie auf die folgende Eigenschaft zugreifen:
| ECMAScript® 2027 Language Specification # sec-new-operator |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.