我正在阅读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
与函数名称冲突。有人可以解释一下吗?
答案 0 :(得分:4)
它确实返回一个空对象。该对象碰巧是NothingSpecial的一个实例,并且您正在使用它来检查它的工具向您揭示(并不是说该对象存储在具有该名称的变量中,因此没有冲突)。 / p>
答案 1 :(得分:2)
如果使用new
关键字,则使用原型继承来创建可称为类的实例。 NothingSpecial
是类/类型名称,因此对象表示为NothingSpecial {}
。这与变量名称无关,它只是类或类型的名称。
答案 2 :(得分:1)
我确信本书已经涵盖了这一点,但JavaScript函数只是一种对象,因此可以实例化。
因此,当您使用new关键字时,您将创建NothingSpecial对象的实例并将其绑定到变量a。如果没有太低级别,a只是对内存中该对象的引用。
NothingSpecial没有变量或成员函数,因此它是一个空对象。它被命名为NothingSpecial,因为它是它的对象类型。变量" a"基本上只是一个贴在它上面的标签,所以你知道它是NothingSpecial的哪个实例。