日期:2014-05-16  浏览次数:20281 次

求解,这段深度拷贝函数为什么没有效果?
function deepCopy(p,c)
{
var c = c || {};
for (var i in p)
{
if (typeof p[i] === 'object')
{
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
}
else
{
c[i] = p[i];
}
}
return c;
}
var Doctor = deepCopy(Chinese);
Chinese.birthPlaces = ['北京','上海','香港'];
Doctor.birthPlaces.push('厦门');
alert(Doctor.birthPlaces); //北京, 上海, 香港, 厦门
alert(Chinese.birthPlaces); //北京, 上海, 香港

没有任何效果,求改正。

------解决方案--------------------
引用:
JavaScript code?1if (typeof p[i] === 'object')         {             c[i] = (p[i].constructor === Array) ? [] : {};             deepCopy(p[i], c[i]);         } 为什么加了这段就属于深度拷贝而不是用内存赋值?还有这个……


c[i] = (p[i].constructor === Array) ? [] : {}; 
创建了一个新的数组,而不是数组的引用。
------解决方案--------------------
这个拷贝已经生效了,
两个alert值不一样正说明已经拷贝,两个对象已经是不同对象了

你说的直接把原对象赋值上去,你不要调函数直接var Doctor = Chinese;不就行了?两个变量绝对是同一个内存,alert的值也肯定是一样
------解决方案--------------------
粗看你的 deepCopy 没有什么问题。结果也没有特别矛盾的地方。

因此,不清楚你的要求。
1) 你希望什么效果?
2) 你源代码中的变量 Chinese 的初始值是什么?
------解决方案--------------------
人家用到了自己定义的“object”类,你又没用到!