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



从节点 repl:

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

返回值:

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

如何将可写可枚举和可配置更改为 false?这些值叫什么?它们是 ES5.1 的一部分吗?还有更多 repl 没有输出的吗?

"你如何将可写可枚举和可配置更改为 false?"

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

还有 Object.defineProperties ,这是相同的,只是您可以设置多个属性,以及 Object.create ,它允许您创建一个新对象,并设置其原型对象及其描述符。

"这些值叫什么?"

它们是属性描述符。

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

是的,ES5。

"还有更多没有输出的吗?"

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

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

您的代码:

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

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

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

只是想添加这个

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

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},
});

最新更新