Javascript noob:为什么不能从初始化器创建新对象?

时间:2011-09-21 22:21:17

标签: javascript

好的,我真的已经阅读了所有可以找到的东西,试图全面了解Javascript。我知道这可以使用构造函数来完成,但我试图理解语言足以知道为什么会发生这种情况......

PeepClass = { color: "Yellow", shape: "Chick" };

var peepsA = new Object(PeepClass);
var peepsB = new Object(PeepClass);

if ( peepsA == peepsB )
  document.write( "Why wouldn't these be unique instances?" );

为什么new Object(PeepClass)没有创建PeepClass对象的唯一实例?相反,它会导致对同一对象的三次引用。

4 个答案:

答案 0 :(得分:2)

我想你想要这个:

var peepsA = Object.create( PeepClass );

现在peepsA是一个新对象,它继承自对象PeepClass


当你将一个对象传递给new Object()时,返回同一个对象,这就是操作是无操作。

PeepClass === new Object( PeepClass )

这意味着符号new Object( obj )毫无意义。

答案 1 :(得分:0)

换句话说,您可以通过两种方式初始化对象:

// these are equivalent
var o1 = new Object();
var o2 = {};

答案 2 :(得分:0)

引用MDN

  

Object constructor为给定值创建一个对象包装器。   如果值为null或未定义,则将创建并返回空值   对象,否则,它将返回对应类型的对象   达到给定值。

换句话说,当您致电new Object(PeepClass)时,您获得的内容不是PeepClass的实例,而是PeepClass本身的实例。

答案 3 :(得分:0)

阅读ECMAScript标准中的新对象([value])构造。如果value是ECMAScript对象,那么它不会创建新对象,只返回值。