有人可以解释这段代码中发生了什么吗?

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'].

的原因