Heim >Web-Frontend >js-Tutorial >Warum gibt eine Konstruktorfunktion manchmal einen anderen Wert zurück?

Warum gibt eine Konstruktorfunktion manchmal einen anderen Wert zurück?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 12:53:021076Durchsuche

Why Does a Constructor Function Sometimes Return a Non-this Value?

Der seltsame Fall von Non-This-Rückgaben in Konstruktorfunktionen

Beim Aufrufen einer Konstruktorfunktion mit dem Schlüsselwort new wird im Allgemeinen davon ausgegangen, dass die Funktion das neu erstellte zurückgibt Objekt. Unter bestimmten Umständen kann jedoch stattdessen ein anderer Wert zurückgegeben werden.

In JavaScript wird die genaue Bedingung, die dieses Verhalten regelt, in der internen Eigenschaft [[Construct]] der ECMAScript-Spezifikation für Funktionsobjekte definiert. Beim Aufruf führt diese Eigenschaft die folgenden Schritte aus:

  1. Erstellt ein neues Objekt.
  2. Setzt seine [[Class]]-Eigenschaft als „Objekt“.
  3. Abruft der Wert der Prototypeigenschaft aus der Konstruktorfunktion.
    4-5. Setzt die [[Prototype]]-Eigenschaft des neuen Objekts auf den Prototypwert (wenn es sich um ein Objekt handelt) oder andernfalls auf das ursprüngliche Objektprototypobjekt.
  4. Ruft die [[Call]]-Eigenschaft der Konstruktorfunktion mit auf das neue Objekt als dieses und übergibt die Konstruktorargumente als seine Argumente.
    7-8. Entscheidender Schritt: Gibt das neue Objekt zurück, wenn Type(Result(6)) kein Objekt ist, oder gibt ansonsten Result(1) (d. h. das in Schritt 1 erstellte neue Objekt) zurück.

Daher bestimmt der von der Konstruktorfunktion zurückgegebene Wert, ob das neu erstellte Objekt zurückgegeben wird oder nicht:

  • Wenn Der zurückgegebene Wert ist ein Nicht-Objekt-Grundelement, das neue Objekt wird zurückgegeben.
  • Wenn der zurückgegebene Wert ein beliebiges Objekt ist, wird stattdessen dieses zurückgegeben.

Um zu testen, ob sich das neu erstellte Objekt wirklich von dem vom Konstruktor zurückgegebenen unterscheidet, kann man Folgendes überprüfen: (neue Foo()-Instanz von Foo) === falsch.

Das obige ist der detaillierte Inhalt vonWarum gibt eine Konstruktorfunktion manchmal einen anderen Wert zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn