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