从节点 repl:
foo = { bar: 'baz'};
console.log (Object.getOwnPropertyDescriptor(foo, 'bar'))
返回值:
{ value: 'baz',
writable: true,
enumerable: true,
configurable: true }
如何将可写可枚举和可配置更改为 false?这些值叫什么?它们是 ES5.1 的一部分吗?repl 没有输出的还有更多吗?
从节点 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。
“还有其他repl没有输出的吗?”
更多什么,属性描述符?不。
squint:我认为您的回答中有一点打字错误。
你的代码:
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},
});