当前位置:  开发笔记 > 编程语言 > 正文

使现有的不可写和不可配置属性可写和可配置

如何解决《使现有的不可写和不可配置属性可写和可配置》经验,为你挑选了1个好方法。

说我有一个对象:

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已经存在.

如何使现有的不可写属性可写?



1> Dark Falcon..:

在Mozilla的文件说,

当属性已存在时,Object.defineProperty()会尝试根据描述符中的值和对象的当前配置来修改属性.如果旧描述符的可配置属性设置为false(该属性被称为"不可配置"),则可以更改除可写之外的任何属性.如果属性不可配置,则其可写属性只能更改为false.

换句话说,你必须设置configurabletrue,如果你想以后修改的属性定义(可写)在第一属性定义.

需要注意的是,当你可以去其他的方式(请写属性不可写)configurablefalse,但毕竟是你在做什么这里相反.


可配置性背后的想法是,您只能加强限制,而不能削弱限制。如果有办法使不可配置的属性可配置,那么它将不会提供任何有意义的不变式或保护。
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有