需要帮助创建执行反向浅拷贝的自定义对象类型?例如:如何将浅拷贝一个javascript数组(容器)?
arrayobj.slice(0)
返回一个具有相同长度的新数组对象,但每个索引都保持对在原始arrayobj的相同索引处找到的对象的引用。因此,没有重复的对象
jQuery的延伸或(....) { arr[i] = deepcopy(arr[i]); }
返回一个新的数组对象具有相同的长度,并且该新的数组的每个索引持有新/复制该同一索引处具有相同的键/值作为对象的对象原来的arrayobj。
你能帮助我建立构造,可以返回参考同一阵列容器,但每个插槽一个新的/复制的对象?理想的情况下可以强制突变限制不允许推/不印字/弹出/反向/移位/排序/剪接
然而,数组和阵列状物体之间的一个主要区别是,阵列状物体从Object.prototype中,而不是继承Array.prototype。这意味着类似于数组的对象无法访问常见的数组原型方法。
用例与原始数组对象的状态有关。因此,如果父阵列容器是一种状态,位于各指标的子对象将每个按键相同,但每个按键可以在比如果父阵列容器被认为是处于不同的状态不同的属性值进行设定。另外,保留原始数组的长度非常重要 - 只需根据原始数组的不同状态来担心每个插槽中的“行为”。
非常感谢您的宝贵意见和指导。
*“[] .concat(arrayobj)或arrayobj.concat([])返回与相同长度的新的数组对象和这种新的数组的每个索引持有新的/重复的对象“*这是不正确的。它与使用'.slice'具有相同的结果。您正在寻找一个简单的'for'循环来迭代数组中的每个元素,克隆它并将其分配回相同的位置。克隆对象不是内置于JavaScript中。请参阅[在JavaScript中深入克隆对象的最有效方法是什么?](http://stackoverflow.com/q/122102/218196) –
我认为这里真正的问题是“如何创建对象的副本?” – mhodges
@FelixKling https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice“slice()方法返回一个数组的一部分到一个新数组的浅表副本object ...对于对象引用(而不是实际对象),slice将对象引用复制到新数组中。原始数组和新数组引用同一个对象。如果引用的对象更改,则更改对于新的和原始的阵列“。 –