Was wird von einem Konstruktor zurückgegeben?

8

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

    
coure2011 28.07.2010, 05:47
quelle

6 Antworten

10

Ich habe diesen tollen Link gefunden:

JavaScript: Konstruktor Rückgabewert

  

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.

%Vor%     
Haim Evgi 28.07.2010, 06:20
quelle
37

Kurze Antwort

Der Konstruktor gibt das Objekt this zurück.

%Vor%

Lange Antwort

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

zurückgibt %Vor%     
Triptych 28.07.2010 06:21
quelle
25

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:

13.2.2 [[Construct]]

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:

  1. Lassen Sie obj ein neu erstelltes natives ECMAScript-Objekt sein.
  2. Legen Sie alle internen Methoden von obj fest, wie in 8.12.
  3. angegeben
  4. Setzen Sie die [[Class]] interne Eigenschaft von obj auf "Object" .
  5. Setzen Sie die [[Extensible]] interne Eigenschaft von obj auf true .
  6. Lassen Sie proto den Wert des Aufrufs der internen Eigenschaft [[Get]] von F mit dem Argument "prototype" .
  7. sein
  8. Wenn Type(proto) Objekt , set the [[Prototyp]] 'interne Eigenschaft von obj zu proto ist.
  9. Wenn 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.
  10. Das Ergebnis ist das Ergebnis des Aufrufs der internen Eigenschaft [[Call] ] von F, wobei obj als der this-Wert bereitgestellt wird und die Argumentliste in [[Construct]] als args.
  11. übergeben wird
  12. Wenn Type(result) Objekt ist, dann gebe das Ergebnis zurück.
  13. Gibt obj zurück.
CMS 28.07.2010 06:07
quelle
0

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.

    
Darin Dimitrov 28.07.2010 05:49
quelle
0

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%     
Fenton 28.07.2010 06:45
quelle
0

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.)

    
Philipp Munin 26.01.2018 17:16
quelle

Tags und Links