这是关于如何保留对象的值。 我有一个对象作为" objData" ,它有我的主要结果。我将objData的结果存储在1个变量中。
var result = objData;
在此之后我将从objData中删除一些属性,如下所示。
var result1 = objData.remove(x=>x.something..);
然后,如果我检查"结果" ,那么它也会更新,因为它的引用类型对象有任何方法可以为&#保留相同的值34;结果" 如果我在创建" result1" 时删除了一些属性?
答案 0 :(得分:1)
var result = objData;
这不会复制objData
的值,而只会创建对同一对象的第二个引用。因此,通过result
或objData
对对象进行的任何修改都会被“看到”。
制作副本取决于对象的类型。有些对象实现了Clone
方法 1 ,有些实现了自己的方法,但大多数情况下你必须创建一个新实例并复制所有状态:
var result = new TheType {
Prop1 = source.Prop1,
Prop2 = source.Prop2,
…
};
当然对于许多类型而言,这样的克隆没有意义(例如,管理TCP套接字的对象)。
1 这是否是深层克隆 - 是递归克隆的对象还是顶级克隆 - 取决于类型。