Wenn ich einen Wert oder ein Objekt in der Konstruktorfunktion zurückgebe, was wird die Variable bekommen?
%Vor%Was n wird in beiden Fällen bekommen?
Eigentlich ist es eine Quizfrage, was wird die Antwort sein?
Was wird von einem benutzerdefinierten Objektkonstruktor zurückgegeben?
a) Das neu instanziierte Objekt
b) undefined - Konstruktoren geben keine Werte zurück
c) Was ist die Rückmeldung?
d) Was ist die Rücksendeaussage? das neu instanziierte Objekt, wenn keine return-Anweisung zurückgegeben wird
Ich habe diesen tollen Link gefunden:
JavaScript: Konstruktor Rückgabewert
%Vor%Das zweite Stück Magie, das oben beschrieben wurde, ist die Fähigkeit für a Konstruktor, um eher ein spezifisches, möglicherweise bereits vorhandenes Objekt zurückzugeben als eine Referenz auf eine neue Instanz. Dies würde Ihnen erlauben, die Anzahl der tatsächlichen Instanzen selbst bei Bedarf; möglicherweise aus Gründen begrenzte Ressourcen oder was nicht.
Der Konstruktor gibt das Objekt this
zurück.
Nach der JavaScript-Spezifikation erstellt Javascript beim Aufruf einer Funktion mit new
ein neues Objekt, setzt dann die Eigenschaft "constructor" dieses Objekts auf die aufgerufene Funktion und weist dieses Objekt schließlich dem Namen this
zu. . Sie haben dann Zugriff auf das Objekt this
für den Hauptteil der Funktion.
Sobald der Funktionskörper ausgeführt wurde, gibt Javascript zurück:
ANY-Objekt, wenn die Funktion manuell eins zurückgibt:
%Vor% Das this
-Objekt, wenn die Funktion keine return
-Anweisung hat ODER wenn die Funktion einen Wert eines anderen Typs als object
Grundsätzlich, wenn Ihr Konstruktor einen primitiven Wert zurückgibt, wie zB eine Zeichenkette, Zahl, Boolean, Null oder undefiniert (oder Sie geben nichts zurück, was der Rückgabe von undefined
entspricht), Ein neu erstelltes Objekt, das vom prototype
des Konstruktors erbt, wird zurückgegeben.
Dies ist das Objekt, auf das Sie mit dem Schlüsselwort this
im Konstruktor zugreifen können, wenn es mit dem Schlüsselwort new
aufgerufen wird.
Zum Beispiel:
%Vor%Wenn der zurückgegebene Wert jedoch eine Objektreferenz ist, ist dies der zurückgegebene Wert, z. B .:
%Vor% Wenn Sie an den Interna des Operators new
interessiert sind, können Sie den Algorithmus der internen Operation [[Construct]]
überprüfen, der verantwortlich ist für das Erstellen des neuen Objekts, das vom Prototyp des Konstruktors erbt, und für die Entscheidung zurückgeben:
Wenn die interne [[Construct]]
-Methode für ein Function
-Objekt F
mit einer möglicherweise leeren Liste von Argumenten aufgerufen wird, werden die folgenden Schritte ausgeführt:
obj
ein neu erstelltes natives ECMAScript-Objekt sein. obj
fest, wie in 8.12. [[Class]]
interne Eigenschaft von obj
auf "Object"
. [[Extensible]]
interne Eigenschaft von obj
auf true
. [[Get]]
von F
mit dem Argument "prototype"
. Type(proto)
Objekt , set the
[[Prototyp]] 'interne Eigenschaft von obj zu proto ist. Type(proto)
kein Objekt ist, setzen Sie die interne Eigenschaft [[Prototype]]
von obj auf das standardmäßige integrierte Objektprototypobjekt wie in 15.2.4 beschrieben. [[Call]
] von F, wobei obj als der this-Wert bereitgestellt wird und die Argumentliste in [[Construct]]
als args. Type(result)
Objekt ist, dann gebe das Ergebnis zurück. obj
zurück. Sie sollten nichts in einem -Konstruktor zurückgeben. Ein Konstruktor wird verwendet, um das Objekt zu initialisieren. Falls Sie wissen möchten, was passiert, wenn Sie 5
zurückgeben, dann ist n
einfach ein leeres Objekt und wenn Sie zum Beispiel { a: 5 }
zurückgeben, dann wird n
eine Eigenschaft a=5
haben.
Um Ihre spezifische Frage zu beantworten:
%Vor%n ist eine Objektinstanz von MyConstructor.
%Vor%n ist eine Instanz von SomeObject (rufen Sie n.shout () auf, um dies zu beweisen)
Um das alles absolut klar zu machen ...
1) Wenn Sie einen primitiven Typ wie eine Zahl oder eine Zeichenfolge zurückgeben, wird er ignoriert. 2) Andernfalls werden Sie das Objekt zurückgeben
Funktionen und Konstruktoren sind in JavaScript genau gleich, aber wie Sie sie aufrufen, ändert ihr Verhalten. Ein kurzes Beispiel dafür ist unten ...
%Vor%Es ist so einfach wie in der Dokumentation (neuer Operator) :
Das von der Konstruktorfunktion zurückgegebene Objekt wird zum Ergebnis des gesamten
new
-Ausdrucks. Wenn die Konstruktorfunktion ein Objekt nicht explizit zurückgibt, wird stattdessen das in Schritt 1 erstellte Objekt verwendet. (Normalerweise geben Konstruktoren keinen Wert zurück, aber sie können dies tun, wenn sie den normalen Objekterstellungsprozess außer Kraft setzen möchten.)
Tags und Links javascript