2011-09-21 33 views
3

好的,我真的已經閱讀了所有我可以找到的嘗試全面理解Javascript。我知道這可以用一個構造函數來完成,但我想明白的語言,足以知道爲什麼會這樣......Javascript noob:爲什麼不能從初始化器創建新的對象?

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對象的唯一實例?相反,它會導致對同一個對象的三個引用。

回答

2

我想你想的:

var peepsA = Object.create(PeepClass); 

現在peepsA是一個新的對象從對象繼承PeepClass


順便說一句,當你傳遞一個對象到new Object(),則返回同一個對象,因此,這個操作是無操作。

PeepClass === new Object(PeepClass) 

這意味着符號new Object(obj)是沒有意義的。

+0

是的,謝謝你。我沒有看到任何可以呈現這種效果的例子,但你是對的。 –

0

換一種方式,你可以通過兩種方式初始化對象:

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

引述MDN

Object constructor創建對於給定的值的對象的包裝。 如果該值爲空或未定義,它將創建並返回一個空的對象,否則,它將返回一個類型對象 到給定值。

換句話說,當你調用new Object(PeepClass)你得到的回覆是不是PeepClass的實例,但PeepClass本身。

0

閱讀有關ECMAScript標準版中新對象([value])構造的信息。如果value是ECMAScript對象,那麼它不會創建一個新的對象,它只是返回值。

相關問題