将对象重置为空对象,在非线性时间内保持引用完整

时间:2014-08-16 01:37:30

标签: javascript

假设我obj1只有可枚举的属性:

var obj1 = { a: 1, b: 2, c: 3 };

然后我创建obj2,其中包含对obj1的引用:

var obj2 = obj1;
obj1 === obj2; // true

在某些时候,我想将obj1重置为空对象:

for (key in obj1) {
  delete obj1[key];
}
obj1 === obj2; // true

但我想避免对所有属性进行迭代:

obj1 = {};
obj1 === obj2; // false (this obviously doesn't work)

还有其他解决方案吗?

1 个答案:

答案 0 :(得分:3)

如果您对数据模型具有灵活性,则将实际属性存储在子对象中:

var obj1 = {theData: { a: 1, b: 2, c: 3} };

然后您可以使用obj1.theData = {}重置属性。

当然,这意味着对任何属性的访问都会产生额外的" hop",因此根据您访问数据的频率(读取或写入)与重置对象的频率,您可能会最好保持delete循环。

除此之外,我不相信你可以重置像对象一样的对象(通过a.length=0)。