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

时间:2016-07-18 11:34:21

标签: javascript javascript-objects

var my_obj = Object.create({}, { 
    getFoo: {
        value: function () { return this.foo; }
    } 
});

my_obj.foo = 1;

console.log(Object.keys(my_obj));

此程序打印出foo作为输出。我很想知道如何。我能否正确解释该计划的进展情况?

2 个答案:

答案 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']的原因。

相关问题