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

Lei*_*mon 8 javascript

从节点repl:

foo = { bar: 'baz'};
console.log (Object.getOwnPropertyDescriptor(foo, 'bar'))
Run Code Online (Sandbox Code Playgroud)

退货价值:

{ value: 'baz',
  writable: true,
  enumerable: true,
  configurable: true }
Run Code Online (Sandbox Code Playgroud)

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

小智 15

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

Object.defineProperty(foo, 'baz', {
    enumerable:false,
    writable:false,
    configurable:false
});
Run Code Online (Sandbox Code Playgroud)

还有Object.defineProperties,这是相同的,除了可以设置多个属性,并且Object.create,这让我们创建一个新的对象,并设置其原型对象,而其描述.

"这些价值被称为什么?"

它们是属性描述符.

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

是的,ES5.

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

更多什么,属性描述符?没有.


Dad*_*uji 5

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

你的代码:

Object.defineProperty(foo, 'baz', {
enumerable:false,
writable:false,
configurable:false
});
Run Code Online (Sandbox Code Playgroud)

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

Object.defineProperty(foo, 'bar', {
enumerable:false,
writable:false,
configurable:false
});
Run Code Online (Sandbox Code Playgroud)