2016-07-06 20 views
2

Per @TobyHoWas ist die Gefahr bei der Rückgabe der primitiven Typen?

Number, String, Boolean sind alle primitiven Typen. Wenn Sie einen dieser Wertetypen aus einem Konstruktor zurückgeben, wird er ignoriert, und der Konstruktor kehrt zu seinem normalen Verhalten zurück, das dieses Objekt zurückgibt.

  • Was ist die Gefahr, die vom Urtyp in der Rückkehr (wegen der der Konstruktor wieder das normale Verhalten ist)?
+5

Es gibt keine "Gefahr". Die Sprachspezifikation besagt, dass ein Konstruktor sein implizites 'this 'zurückgibt, es sei denn, es gibt explizit ein Objekt zurück. Primitive Typen sind keine Objekte. Daher gibt ein Konstruktor sein implizites "this" zurück, wenn es einen primitiven Typ zurückgibt. –

+0

Es ist keine Gefahr. Der Autor sagt nur eine Tatsache darüber, was passiert. Es ist nützlich, sich dessen bewusst zu sein. – ADyson

+0

@ Frédéric Hamidi Wenn Sie eine Rückkehr zu einem primitiven Wert aufrufen, wird dieser verworfen. Siehe meine Antwort bitte. Ich zitiere ein Beispiel, in dem dieser Fall auftritt –

Antwort

1

Beachten Sie, dass technisch jede Funktion als Konstruktor verwendet werden kann.

Aber um die als Konstruktor konzipierte Funktion hervorzuheben, werden sie mit einem Großbuchstaben bezeichnet: Tier statt Tier.

In der Regel der Konstruktor nicht anythingюTheir Mission zurückkehren - alles aufzuschreiben, was Sie brauchen, in diesem, die automatisch

Aber wenn ein expliziter Aufruf ist immer noch da zurück führen wird, dann gilt eine einfache Regel :

  • Wenn der Aufruf an das Objekt zurückgegeben wird, wird es anstelle dieses zurückgegeben.
  • Wenn Sie eine Rückkehr zu einem primitiven Wert aufrufen, wird dieser verworfen.

Zum Beispiel kann das Objekt zurück:

function BigAnimal() { 

    this.name = "Mouse"; 

    return { name: "Godzilla " }; // <-- return the object 
} 

alert(new BigAnimal().name); // Godzilla, we got an object instead of this 

Hier ein Beispiel für einen Zeilenumbruch ist:

function BigAnimal() { 

    this.name = "Mouse"; 

    return "Godzilla"; // <-- return the primitive 
} 

alert(new BigAnimal().name); // Mouse, received this (but Godzilla is gone) 

Dieses Merkmal der Arbeit in dem neuen Standard registriert ist, aber es wird sehr selten verwendet.