如何使不可扩展的对象成为可扩展的?

时间:2018-08-09 06:24:01

标签: javascript object

我需要更改一个不可扩展的对象。有什么解决方法可以更改此对象属性?

我已阅读说明如下的文档 “一旦对象变得不可扩展,就无法使其再次可扩展。”

有没有解决方法?像复制对象或其他东西?

2 个答案:

答案 0 :(得分:3)

除了复制对象外,另一种可能性是创建一个新对象,该对象的 prototype 是不可扩展的对象:

const object1 = {
  foo: 'foo',
};
Object.preventExtensions(object1);
// We can't assign new properties to object1 ever again, but:

const object2 = Object.create(object1);
object2.bar = 'bar';
console.log(object2);

/* This will create a property *directly on* object2, so that
  `object2.foo` refers to the property on object2,
  rather than falling back to the prototype's "foo" property: */
object2.foo = 'foo 2';
console.log(object2);

答案 1 :(得分:1)

原型方法很好,但是与克隆相比有一个局限性。 并非所有的迭代机制都会通过原型继承的属性

例如for / in循环很好,但是Object.keys(object2)不会列出任何不会被再次覆盖的继承属性。