有没有办法删除使用Object.defineProperty
设置的属性描述符? configurable
描述符可以是true
。删除属性并将其添加回来是一种方法,但有内置的方法吗?
答案 0 :(得分:0)
如果将configurable
标志设置为false,则无法修改属性的描述符。正如MDN states:
当尝试更改不可配置的属性属性(除了可写属性)时,抛出TypeError,除非当前值和新值相同。
所以,你的 hacky 方法是实现这一目标的唯一方法。
话虽如此,由于某种原因,属性设置为不可配置,如果您的应用程序依赖于使不可配置的属性可配置,那么您的应用程序中可能存在代码味道。
答案 1 :(得分:0)
Object.defineProperty
不会“设置属性描述符”;它根据属性描述符设置flags,value和getter / setter。因此,说“删除属性描述符”是没有意义的;只有说“删除财产”或“重新定义财产”才有意义。
删除属性本身的方法是使用delete
。如果您想要将其添加回来,则将其添加回来。
重新定义房产的方法是重新定义房产。无法有选择地修改属性的某些标志。 Object.defineProperty
是全有或全无。因此,如果您想要更改writeable
之类的内容,那么是的,您必须使用整套新密钥再次调用Object.defineProperty
。这类似于在已使用set
定义属性之后如何向属性添加get
的问题。无法添加set
。您必须使用get
和 a set
重新定义该属性。
您可以调用Object.getOwnPropertyDescriptor
来获取包含当前标志等的描述符,然后修改它并用它调用Object.defineProperty
。这将完全取代之前的属性(假设它是可配置的)。这不是一个黑客;这只是你重置一个属性的标志的方式。顺便说一句,没有特别需要delete
。
但是,一旦你建立了一个configurable
标志设置为false的属性,你几乎没有运气。您不仅无法重新定义该属性,甚至无法删除它以便重新定义它。