var my_obj = Object.create({}, {
getFoo: {
value: function() { return this.foo; }
}
});
my_obj.foo = 1;
console.log(Object.keys(my_obj));
該程序輸出foo
作爲輸出。我想知道如何。我能否正確解釋此計劃的進展情況?有人可以解釋這段代碼中發生了什麼嗎?
var my_obj = Object.create({}, {
getFoo: {
value: function() { return this.foo; }
}
});
my_obj.foo = 1;
console.log(Object.keys(my_obj));
該程序輸出foo
作爲輸出。我想知道如何。我能否正確解釋此計劃的進展情況?有人可以解釋這段代碼中發生了什麼嗎?
的Object.create()
方法創建具有指定原型對象和屬性的新對象:
Object.create(proto[, propertiesObject])
使用這種語法,默認屬性不可寫,可枚舉或可配置。爲了使這樣的:
var my_obj = Object.create({}, {
getFoo: {
value: function() { return this.foo; },
writable: true,
enumerable: true,
configurable: true
}
});
酒店foo
根據已建立的方法是枚舉。
Object.keys()
方法返回給定對象自己的數組可枚舉的屬性。這就是你有['foo']
的原因。
感謝@Alex的回覆 –
Object.keys
返回可枚舉對象上的鍵。
Object.create
中定義的屬性在默認情況下是不可枚舉的(添加enumerable:true
和value
一起會改變這一點)。
像my_obj.foo
定義的屬性是可枚舉的。
因此,Object.keys(my_obj)
只返回["foo"]
,因爲這是該對象上唯一的枚舉屬性。
文檔:
你能詳細解釋一下嗎? @NiettheDarkAbsol –
作爲輸出你期望什麼? – nnnnnn