new myFunction()返回一个名为myFunction的对象?

时间:2016-08-28 09:22:42

标签: javascript

我正在阅读Kyle Simpson的“You-Dont-Know-JS”系列,并遇到了这个代码块:

function NothingSpecial() {
    console.log( "Don't mind me!" );
}

var a = new NothingSpecial();
// "Don't mind me!"

a; // {}

根据这一点,最后一行a;应该返回一个空对象{}。但是正如我所看到的,它返回一个名为NothingSpecial(NothingSpecial {})的对象。我对这种行为感到有些困惑。 new NothingSpecial()创建的对象为a,据我所知,它应该命名为a而不是NothingSpecial。此外,名称NothingSpecial与函数名称冲突。有人可以解释一下吗?

3 个答案:

答案 0 :(得分:4)

它确实返回一个空对象。该对象碰巧是NothingSpecial的一个实例,并且您正在使用它来检查它的工具向您揭示(并不是说该对象存储在具有该名称的变量中,因此没有冲突)。 / p>

答案 1 :(得分:2)

如果使用new关键字,则使用原型继承来创建可称为类的实例。 NothingSpecial是类/类型名称,因此对象表示为NothingSpecial {}。这与变量名称无关,它只是类或类型的名称。

答案 2 :(得分:1)

我确信本书已经涵盖了这一点,但JavaScript函数只是一种对象,因此可以实例化。

因此,当您使用new关键字时,您将创建NothingSpecial对象的实例并将其绑定到变量a。如果没有太低级别,a只是对内存中该对象的引用。

NothingSpecial没有变量或成员函数,因此它是一个空对象。它被命名为NothingSpecial,因为它是它的对象类型。变量" a"基本上只是一个贴在它上面的标签,所以你知道它是NothingSpecial的哪个实例。