有人可以解释这段代码中发生了什么吗?
Can someone explain what is happening in this piece of code?
var my_obj = Object.create({}, {
getFoo: {
value: function () { return this.foo; }
}
});
my_obj.foo = 1;
console.log(Object.keys(my_obj));
这个程序打印出 foo
作为输出。我想知道它如何。我能得到这个程序中发生的事情的正确解释吗?
Object.keys
returns 对象上的可枚举键。
Object.create
中定义的属性默认是不可枚举的(在 value
旁边添加 enumerable:true
会改变这一点)。
定义为 my_obj.foo
的属性是可枚举的。
因此,Object.keys(my_obj)
仅 returns ["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()
方法 returns 给定对象自己的 enumerable 属性的数组。这就是您 ['foo']
.
的原因
var my_obj = Object.create({}, {
getFoo: {
value: function () { return this.foo; }
}
});
my_obj.foo = 1;
console.log(Object.keys(my_obj));
这个程序打印出 foo
作为输出。我想知道它如何。我能得到这个程序中发生的事情的正确解释吗?
Object.keys
returns 对象上的可枚举键。
Object.create
中定义的属性默认是不可枚举的(在 value
旁边添加 enumerable:true
会改变这一点)。
定义为 my_obj.foo
的属性是可枚举的。
因此,Object.keys(my_obj)
仅 returns ["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()
方法 returns 给定对象自己的 enumerable 属性的数组。这就是您 ['foo']
.