假设我有一个对象:
var agent = new Agent({name: 'James', type: 'secret', id: 007})
当我构建 Agent 类时,我决定使 id 属性不可变:
Object.defineProperty(Agent.prototype, 'id', {
configurable: false,
writable: false
})
但在某些时候我会想要将该对象标记为删除。因为我们实际上无法删除this
,我将通过移除id
财产代替。所以我要再次使该属性可写:
Object.defineProperty(agent, 'id', {
configurable: true,
writable: true
})
delete agent.id
但我当然得到:
TypeError: Cannot redefine property: id
Because id
已经存在。
我怎样才能做一个existing不可写属性可写?
The Mozilla 文档 says
当属性已经存在时,Object.defineProperty() 尝试
根据描述符和描述符中的值修改属性
对象的当前配置。如果旧描述符有它的
可配置属性设置为 false(该属性据说是
“不可配置”),那么除了可写之外不能有任何属性
改变了。如果属性不可配置,则其可写属性可以
只能改成false。
换句话说,您必须设置configurable
to true
如果您想稍后修改属性定义(使其可写),请在第一个属性定义中。
请注意,您可以采用其他方式(使可写属性不可写)configurable
is false
,但这与您在这里所做的相反。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)