【问题标题】:Is there any way to reverse or undo the preventExtensions function?有什么方法可以逆转或撤消 preventExtensions 功能?
【发布时间】:2017-02-26 14:27:11
【问题描述】:

可以使不可扩展的对象可扩展吗?

var obj = {};
Object.preventExtensions(obj);
obj.abc = "abc"; // this line is ignored which is normal
//is there a way to make obj extensible again

【问题讨论】:

  • MDN web docs 上它说“一旦对象不可扩展,就无法再次使其可扩展。”也许你可以重新分配对象?

标签: javascript object properties


【解决方案1】:

深度克隆怎么样?

obj = JSON.parse(JSON.stringify(obj));
obj.abc = "abc"; // this line is now OK

在本地代码中可以,但 obj 附带的任何外部引用将不再指向新形成的 obj

【讨论】:

【解决方案2】:

正如MDN 所说:

一旦对象不可扩展,就无法再次使其可扩展。

克服这种情况的最简单方法是克隆对象并将其分配给新变量:

const person = {
  name: "John",
  colors: {
    eyes: 'orange',
    hair: 'blue'
  }
};

Object.preventExtensions(person);
console.log(Object.isExtensible(person)); // false

const extensiblePerson = {...person};
console.log(Object.isExtensible(extensiblePerson)); // true

需要注意的是,Object.preventExtensions 只防止对象顶层的扩展。在上面的例子中,person.colors 仍然是可扩展的,即使它的父对象不是。

console.log(Object.isExtensible(person.colors)); // true
console.log(extensiblePerson.colors === person.colors); // true

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2012-10-22
    • 2014-08-14
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多