2016-03-20 55 views
2

當我使用文字語法創建對象時,將對象打印到控制檯將顯示對象foop屬性。爲什麼使用Object.create()和console.log()時屬性不顯示?

foo = {}; 
foo.p = 42; 
console.log(foo); 
console.log(foo.p); 

Outputs: 
{ p: 42 } 

當我使用Object.create()語法時,用console.log打印對象顯示一個空對象。

bar = Object.create({}, { p: { value: 42 } }); 
console.log(bar); 
console.log(bar.p); 

Outputs: 
{} 
42 

使用的console.log時爲什麼不bar顯示屬性p()?

+2

這是您使用的瀏覽器,它49 – thanhpk

+0

什麼環境,您使用的正常工作在我的瀏覽器? – Bergi

回答

2

我猜你正在使用NodeJS進行這些測試。

的原因是,在第二個實施例(使用Object.create),則p屬性是不可枚舉。當我在NodeJS上運行你的例子時,我沒有在第二個例子中看到p,因爲它是不可枚舉的,因爲通過屬性描述符創建的屬性(例如Object.create的第二個參數中的屬性)默認爲不可枚舉,除非包含enumerable: true。如果我在其中添加enumerable: true,我也會在第二個示例中看到p

您看到的內容取決於您使用的環境。例如,在Chrome的devtools中,即使p不可枚舉,我在兩個示例中都會看到p。但是當輸出到非交互式控制檯時,我猜他們決定只顯示枚舉屬性。

0

我在控制檯中試過,它的工作正常。

enter image description here

相關問題