使现有的不可写和不可配置属性可写和可配置
Make existing non-writable and non-configurable property writable and configurable
假设我有一个对象:
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
因为id
已经存在。
如何使现有的不可写属性可写?
Mozilla文档显示
当属性已经存在时,Object.defineProperty()尝试根据描述符中的值和对象的当前配置。如果旧描述符可配置属性设置为false(据说属性为"不可配置"),则除了可写之外,任何属性都不能已更改。如果属性不可配置,则其可写属性可以只能更改为false。
换句话说,如果以后要修改特性定义(使其可写),则必须在第一个特性定义中将configurable
设置为true
。
请注意,当configurable
是false
时,您可以采用另一种方式(使可写属性不可写),但这与您在这里所做的相反。
相关文章:
- 断言属性不可配置
- 使用Javascript而不是html数据属性配置Parsley
- 为什么此可配置属性不可删除
- 缺少咕噜声所需的配置属性
- Sencha Touch Store配置属性仅在“__proto__”;
- 使用script元素上的html data-*属性来配置引用的脚本文件
- Magento 1.9.2-更新自定义属性'delivery_time'在可配置的产品过程中
- 如何更改 Javascript 对象属性的可写可枚举和可配置值
- TypeError: 属性 Array.prototype.splice.call(..) 是不可配置的,无法删除
- 递归 js v3 未捕获的类型错误:无法读取未定义的属性“配置”
- 通过函数填充 Grunt 任务配置的“文件”属性
- 在 JSON.parse() 之后保留属性属性(可写、可配置)
- PyQT4:“类型错误:尝试配置不可配置属性的可配置属性
- 类型错误:属性 1 不可配置,无法删除
- 使现有的不可写和不可配置属性可写和可配置
- 如何在ECMAScript 5: Object中配置属性.创建或定义对象属性
- 访问自定义ui-router配置属性中的$stateParams
- 如何在Extjs 6中给视图项配置属性
- 对象的可配置属性和可写属性的区别
- 我没有'无法理解对象的可写和可配置属性