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

Reset object to empty object keeping references intact in non-linear time

本文关键字:对象 时间 引用 非线性      更新时间:2023-09-26

假设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)

有其他解决方案吗?

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

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

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

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

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