2016-07-06 67 views
2

@TobyHo返回原始類型有什麼危險?

NumberStringBoolean,是所有基本類型。如果您從構造函數中返回這些類型的值中的一個,它將被忽略,並且構造函數將返回到返回此對象的正常行爲。

  • 什麼是返回原始類型(因爲它的構造函數返回到它的正常行爲)的危險?
+5

沒有「危險」。語言規範說,除非顯式地返回一個對象,否則構造函數會返回它的隱式'this'。原始類型不是對象。因此,如果構造函數返回一個基本類型,則返回它的隱式'this'。 –

+0

這不是危險。作者只是陳述發生了什麼事實。瞭解這一點很有用。 – ADyson

+0

@FrédéricHamidi當您調用返回到原始值時,它將被丟棄。請看我的答案。我舉了一個這種情況發生的例子 –

回答

1

請注意,從技術上講,任何函數都可以用作構造函數。

但爲了突出這個函數,構造函數被認爲是一個大寫字母:Animal,而不是動物。

作爲一項規則,構造函數沒有返回anythingюTheir使命 - 寫下來你的需要,在這一切,這將自動導致

但如果顯式調用返回仍然存在,那麼它適用於簡單的規則:

  • 當返回對象的回調函數時,它會返回而不是 這個。
  • 當您調用返回到原始值時,它將被丟棄。

例如,對象返回:

function BigAnimal() { 

    this.name = "Mouse"; 

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

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

下面是一行返回例如:

function BigAnimal() { 

    this.name = "Mouse"; 

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

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

新標準登記工作的此功能,但它很少使用。