2016-07-06 44 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) 

新标准登记工作的此功能,但它很少使用。

相关问题