2016-01-01 28 views
-1

這是我發現的一件有趣的事情,但不知道它爲什麼會發生。JavaScript - 繼承鏈中可見的對象屬性

創建

var Person = new Object; 

var billy = Person; 
var emily = Person; 

那麼我指定一個名稱屬性艾米莉

emily.name = "emily" 

當我檢查hasOwnProperty(名稱)比利和人,我得到的,真實的。當我檢查billy.name和Person.name時,我得到「emily」。

爲什麼給艾米莉一個名字,爲每個人設置一個名稱屬性併爲其賦值相同的值?

+1

因爲你只需創建一個對象和三分,它(下同)。 – Sirko

+0

這裏沒有「繼承」 – Eric

回答

0

Person是一個對象

var Person = {} 

你給billyemily擁有對象的地址的副本通過Person

var billy = Person; 

Billy,你在這個地方在內存中觀看這些屬性。

var emily = Person; 

Emily,你看這個地方在內存中的屬性。

在這部分,兩個觀看同一個對象在同一個地方在內存中。 當這個對象改變(通過Person,billyemily訪問),那麼所有看到相同的修改對象。

var Person = address Ox27382738 
var bily = address(Person) 
var emily = address(Person) 
0

發生這種情況是因爲您有一個對象並正在創建對該對象的不同引用。

var Person = new Object; 

該行創建一個新對象併爲該對象分配Person。

var billy = Person; 
var emily = Person; 

以上兩行僅僅是爲以前創建的對象創建新引用billy和emily。所以,所有三個引用(Person,Billy,Emily)都指向同一個對象。

如果您使用任何引用訪問或更改任何字段,則結果將是相同的,因爲所有引用都指向同一個對象。

在這種情況下

emily.name == billy.name == Person.name