来自节点repl:
foo = { bar: 'baz'};
console.log (Object.getOwnPropertyDescriptor(foo, 'bar'))
返回值:
{ value: 'baz',
writable: true,
enumerable: true,
configurable: true }
如何更改可写入的可枚举,并可配置为false?这些价值被称为什么?它们是ES5.1的一部分吗?是否有更多的repl没有输出?
答案 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},
});