【问题标题】:How to reset configurable to a property如何将可配置重置为属性
【发布时间】:2017-11-05 06:25:32
【问题描述】:

我有一个关于“可配置”的问题

如果我输入

var o = {x:1}
Object.getOwnPropertyDescriptor(o, 'x')

{ value: 1, writable: true, enumerable: true, 可配置: true }

Object.defineProperty(o, 'x', {configurable: false});
Object.getOwnPropertyDescriptor(o, 'x')

{ 值:1,可写:真,可枚举:真,可配置: 假}

我学习 JavaScript - The Definitive Guide,第 6-7 章 它说:

如果属性不可配置,则无法更改其可配置或可枚举的属性。

我想知道有什么方法可以将configurable 重置为真吗?或者这只是一个无聊的问题?(在任何情况下都不会发生)

【问题讨论】:

  • 在您的示例中,可配置默认设置为 true。你不需要改变。
  • 重新定义o = Object.assign({}, o) 可行,但似乎有点老套。

标签: javascript


【解决方案1】:

当它为false时,无法将configurable设置为true。

var o = {x:1};
Object.defineProperty(o, 'x', {
  configurable: false
});

Object.defineProperty(o, 'x', {
  configurable: true
}); // throws a TypeError

你只能创建一个新的对象来替换不可配置的对象。让不可配置的对象被垃圾回收从内存中删除。

在某些情况下,您可以将对象设置为不可配置以确保其他对象无法更改。

例如,如果你发现Vue.js运行proxySetter耗时较长的性能问题,可能是复杂对象附加到Vue实例,你可以设置复杂对象不可配置以避免被Vue观察到。 js。当然,更好的方法是不要将复杂的对象附加到 Vue 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多