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 August 2016 browserübergreifend verfügbar.
Die name Dateneigenschaft einer Function Instanz gibt den Namen der Funktion an, wie er beim Erstellen angegeben wurde, oder sie kann entweder anonymous oder '' (ein leerer String) sein, wenn Funktionen anonym erstellt wurden.
Ein String.
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | ja |
Hinweis: In nicht-standardmäßigen, Pre-ES2015 Implementierungen war das configurable Attribut ebenfalls false.
Die name-Eigenschaft der Funktion kann verwendet werden, um die Funktion in Debugging-Werkzeugen oder Fehlermeldungen zu identifizieren. Sie hat keine semantische Bedeutung für die Sprache selbst.
Die name-Eigenschaft ist schreibgeschützt und kann nicht durch den Zuweisungsoperator geändert werden:
Um sie zu ändern, verwenden Sie Object.defineProperty().
Die name-Eigenschaft wird typischerweise basierend darauf abgeleitet, wie die Funktion definiert ist. In den folgenden Abschnitten beschreiben wir die verschiedenen Möglichkeiten, wie sie abgeleitet werden kann.
Die name-Eigenschaft gibt den Namen einer Funktionsdeklaration zurück.
Eine export default Deklaration exportiert die Funktion als Deklaration anstelle eines Ausdrucks. Wenn die Deklaration anonym ist, ist der Name "default".
Funktionen, die mit dem Function() Konstruktor erstellt werden, haben den Namen "anonymous".
Wenn der Funktionsausdruck benannt ist, wird dieser Name als name-Eigenschaft verwendet.
Anonyme Funktionsausdrücke, die entweder mit dem function-Schlüsselwort oder der Pfeilfunktionssyntax erstellt wurden, haben standardmäßig "" (einen leeren String) als Namen.
Solche Fälle sind jedoch selten — normalerweise wird, um die Funktion anderswo aufzurufen, der Funktionsausdruck mit einem Bezeichner verknüpft. Der Name eines anonymen Funktionsausdrucks kann innerhalb bestimmter syntaktischer Kontexte abgeleitet werden, einschließlich: Variablendeklaration, Methode, Initialisierung und Standardwert.
Ein praktischer Fall, in dem der Name nicht abgeleitet werden kann, ist eine Funktion, die aus einer anderen Funktion zurückgegeben wird:
Variablen und Methoden können den Namen einer anonymen Funktion aus ihrer syntaktischen Position ableiten.
Dasselbe gilt für die Zuweisung:
Funktionen in Initialisierungen (Standardwerten) von Destrukturierungen, Standardparametern, Klassenfeldern usw. erben den Namen des gebundenen Bezeichners als ihren name.
Function.prototype.bind() erzeugt eine Funktion, deren Name "bound " plus der Funktionsname ist.
Wenn Zugriffseigenschaften get und set verwendet werden, erscheint "get" oder "set" im Funktionsnamen.
Der Name einer Klasse folgt dem gleichen Algorithmus wie Funktionsdeklarationen und -ausdrücke.
Warnung: JavaScript setzt die name-Eigenschaft einer Funktion nur, wenn sie keine eigene Eigenschaft namens name hat. Klassen' statische Mitglieder werden jedoch als eigene Eigenschaften der Klassenkonstruktorfunktion festgelegt und verhindern somit, dass der eingebaute name angewendet wird. Siehe ein Beispiel unten.
Wenn ein Symbol als Funktionsname verwendet wird und das Symbol eine Beschreibung hat, ist der Methodenname die Beschreibung in eckigen Klammern.
Private Felder und private Methoden haben das Rautezeichen (#) als Teil ihrer Namen.
Sie können obj.constructor.name verwenden, um die "Klasse" eines Objekts zu überprüfen.
Da jedoch statische Mitglieder zu eigenen Eigenschaften der Klasse werden, können wir den Klassenname für praktisch jede Klasse mit einer statischen Methodeneigenschaft name() nicht erhalten:
Mit einer static name() Methode hält Foo.name nicht mehr den tatsächlichen Klassennamen, sondern eine Referenz auf das name() Funktionsobjekt. Der Versuch, die Klasse von fooInstance über fooInstance.constructor.name zu erhalten, gibt uns nicht den Klassennamen, sondern eine Referenz auf die statische Klassenmethode. Beispiel:
Aufgrund der Existenz statischer Felder könnte name ebenfalls keine Funktion sein.
Wenn eine Klasse eine statische Eigenschaft namens name hat, wird sie auch beschreibbar. Die eingebaute Definition in der Abwesenheit einer benutzerdefinierten statischen Definition ist schreibgeschützt:
Daher können Sie sich nicht darauf verlassen, dass die eingebaute name-Eigenschaft immer den Namen einer Klasse enthält.
Warnung: Seien Sie vorsichtig bei der Verwendung der name-Eigenschaft mit Quellcode-Transformationen, wie sie von JavaScript-Komprimierern (Minifizierern) oder Obfuskatoren durchgeführt werden. Diese Werkzeuge werden oft im Rahmen einer JavaScript-Build-Pipeline verwendet, um die Größe eines Programms vor der Bereitstellung in der Produktion zu reduzieren. Solche Transformationen ändern oft den Namen einer Funktion zur Build-Zeit.
Quellcode wie:
kann komprimiert werden zu:
In der unkomprimierten Version läuft das Programm in den truthy-Zweig und protokolliert "'foo' is an instance of 'Foo'" — während es in der komprimierten Version anders reagiert und in den else-Zweig läuft. Wenn Sie sich auf die name-Eigenschaft verlassen, wie im obigen Beispiel, stellen Sie sicher, dass Ihre Build-Pipeline die Funktionsnamen nicht ändert, oder verlassen Sie sich nicht darauf, dass eine Funktion einen bestimmten Namen hat.
| ECMAScript® 2027 Language Specification # sec-function-instances-name |
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.