如何更改Javascript对象属性的可写可枚举和可配置值?

时间:2012-07-01 02:40:14

标签: javascript

来自节点repl:

foo = { bar: 'baz'};
console.log (Object.getOwnPropertyDescriptor(foo, 'bar'))

返回值:

{ value: 'baz',
  writable: true,
  enumerable: true,
  configurable: true }

如何更改可写入的可枚举,并可配置为false?这些价值被称为什么?它们是ES5.1的一部分吗?是否有更多的repl没有输出?

3 个答案:

答案 0 :(得分:15)

  

“你如何更改可写入的可枚举,并可配置为false?”

Object.defineProperty(foo, 'baz', {
    enumerable:false,
    writable:false,
    configurable:false
});

除了你可以设置多个属性之外,还有Object.defineProperties,它们是相同的,Object.create,你可以创建一个新对象,并设置它的原型对象及其描述符。

  

“这些值被称为什么?”

他们是财产描述符。

  

“它们是ES5.1的一部分吗?”

是的,ES5。

  

是否有更多的repl没有输出?”

更多什么,属性描述符?否。

答案 1 :(得分:1)

斜视:我认为你的答案中有一点打字错误。

您的代码:

Object.defineProperty(foo, 'baz', {
enumerable:false,
writable:false,
configurable:false
});

但第二个参数必须是属性的名称而不是值,因此正确的代码是:

Object.defineProperty(foo, 'bar', {
enumerable:false,
writable:false,
configurable:false
});

答案 2 :(得分:0)

只想在

中添加此内容

首次创建对象时可以更改属性,如下所示:

var newObj = Object.defineProperty({}, 'aPropertyName', {
    enumerable:false,
    writable:false,
    configurable:false
});

您也可以一次更改多个属性:

var newObj = Object.defineProperties({}, {
    aPropertyName: {enumerable: false, writable: false, configurable: false},
    anotherPropertyName: {enumerable: true, writable: true, configurable: false},
    finalPropertyName: {enumerable: true, writable: false, configurable: true},
});

当然,使用上一个方法传递对象名称:

Object.defineProperties(objectName, {
    aPropertyName: {enumerable: false, writable: false, configurable: false},
    anotherPropertyName: {enumerable: true, writable: true, configurable: false},
    finalPropertyName: {enumerable: true, writable: false, configurable: true},
});