可枚举和可配置属性在Javascript中做了什么?

时间:2014-02-11 11:26:20

标签: javascript

我在Javascript中看到了这段代码:

Object.defineProperty(Pet.prototype, "petName", {
    get: function () {
        return this.petName;
    },
    set: function (petName) {
        this.petName = petName;
    },
    enumerable: true,
    configurable: true
});

这似乎是Javascript中属性的存取方法。但我不明白的是enumerable: trueconfigurable: true。我在网上搜索过,但我仍然不太明白Mozilla文档中的内容。我尝试将它们设置为false,看起来我仍然可以毫无问题地访问该属性,但似乎没有区别。

这里的enumerableconfigurable属性究竟对访问器方法有何作用?如果有一个例子来说明他们的目的,那将会很好。

1 个答案:

答案 0 :(得分:3)

请参阅MDN documentation for Object.defineProperty

  

<强>枚举

     

当且仅当此属性在此期间显示时才显示   枚举相应对象的属性。

即。它会显示在for ... in循环中,Object.keys

  

<强>配置

     

当且仅当此属性描述符的类型为true时才为true   如果财产可能被删除,可能会被更改   相应的对象。

e.g。如果configurable设置为false,则您无法随后修改属性的描述符,可能会将其更改为非enumerablewritable

另请参阅ES5 specification