Heim >Web-Frontend >js-Tutorial >Können Konstruktoren andere Werte als „this' zurückgeben?

Können Konstruktoren andere Werte als „this' zurückgeben?

Linda Hamilton
Linda HamiltonOriginal
2024-11-14 13:01:02623Durchsuche

Can Constructors Return Values Other Than

Rückgabewerte für Konstruktoren, die die „this“-Referenz umgehen

Beim Aufrufen eines Konstruktors mit dem Schlüsselwort new gilt das Standardverhalten für Konstruktor, um das neu erstellte Objekt (als „this“ bezeichnet) zurückzugeben. Es gibt jedoch bestimmte Umstände, unter denen ein Konstruktor einen anderen Wert zurückgeben kann, wodurch die Zuweisung von „this“ zum neu erstellten Objekt effektiv verhindert wird.

Gemäß der ECMAScript-Spezifikation Schritt 8 des [[Construct]] Die interne Eigenschaft definiert das Rückgabeverhalten wie folgt:

Wenn der Typ des von der Konstruktorfunktion (Ergebnis(6)) zurückgegebenen Werts kein ist Objekt:

- The value returned by the constructor will be returned instead of "`this`".

Um daher einen anderen Wert als „dies“ von einem Konstruktor zurückzugeben:

  1. Ein Nicht-Objekt-Primitiv zurückgeben (z. B. eine Zeichenfolge, Zahl oder boolescher Wert): Wenn der zurückgegebene Wert ein Grundwert ist, wird er nicht als Objekt interpretiert und somit auch nicht das neue Objekt zurückgegeben.
  2. Gibt ein benutzerdefiniertes Objekt oder einen Nicht-Null-Wert mit einem anderen Typ als Object zurück: Dies kann mit der Methode Object.create() oder durch Zuweisen eines anderen Prototyps erreicht werden das erstellte Objekt.

Beispiel:

function Foo() {
    return { name: "sample" };
}

var foo = new Foo();
console.log(foo instanceof Foo); // false

In diesem Fall, da der Foo-Konstruktor ein Objekt zurückgibt, das nicht vorhanden ist Eine Instanz des Foo-Konstruktors (neue Foo()-Instanz von Foo) wird als falsch ausgewertet.

Das obige ist der detaillierte Inhalt vonKönnen Konstruktoren andere Werte als „this' zurückgeben?. 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