【发布时间】:2024-01-08 03:56:01
【问题描述】:
我有一堂课是这样的:
function Element(){
this.changes = {};
}
现在我有一个这样的“类”实例,el = new Element()。这些实例存储在一个数组中,例如elements.push(el)。
这个元素数组现在存储在一个对象中,然后将其推入一个数组states。
现在在某些情况下我需要其中一个元素的副本,因此我需要执行类似var cloned = $.extend(true, {}, states[0]) 的操作。这里我假设我们正在克隆第一个状态。
现在的问题是我得到的 state[1].elements[0] 仍然指向原始实例。因此,我对克隆对象所做的任何更改都会更改原始对象。
卡在这样一个小问题上真是令人沮丧……
这是我为测试它而创建的小提琴: http://jsfiddle.net/E6wLW/
【问题讨论】:
-
我似乎无法复制这个,看看这个jsFiddle。
-
我刚刚添加了一个指向 jsfiddle sn-p 的链接
-
另外,我对问题做了一些修改
-
正确的解决方案是重新设计算法以消除对深度复制的需求。深度复制是a)正确的噩梦,b)计算成本高,c)创建依赖于所有被深度复制的逻辑。深拷贝是一个难以解决的问题,应该通过使用浅拷贝来避免。
标签: javascript jquery object clone extend