var my_obj = Object.create({}, {
getFoo: {
value: function () { return this.foo; }
}
});
my_obj.foo = 1;
console.log(Object.keys(my_obj));
此程序打印出foo
作为输出。我很想知道如何。我能否正确解释该计划的进展情况?
答案 0 :(得分:1)
Object.keys
会在对象上返回可枚举的键。
Object.create
中定义的属性默认情况下是不可枚举的(在enumerable:true
旁边添加value
会改变这一点。)
定义为my_obj.foo
的属性是可枚举的。
因此,Object.keys(my_obj)
仅返回["foo"]
,因为这是对象上唯一的可枚举属性。
<强>文档强>
答案 1 :(得分:0)
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']
的原因。