求解,这段深度拷贝函数为什么没有效果?
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); //北京, 上海, 香港
没有任何效果,求改正。
------解决方案--------------------
c[i] = (p[i].constructor === Array) ? [] : {};
创建了一个新的数组,而不是数组的引用。
------解决方案--------------------这个拷贝已经生效了,
两个alert值不一样正说明已经拷贝,两个对象已经是不同对象了
你说的直接把原对象赋值上去,你不要调函数直接var Doctor = Chinese;不就行了?两个变量绝对是同一个内存,alert的值也肯定是一样
------解决方案--------------------粗看你的 deepCopy 没有什么问题。结果也没有特别矛盾的地方。
因此,不清楚你的要求。
1) 你希望什么效果?
2) 你源代码中的变量 Chinese 的初始值是什么?
------解决方案--------------------人家用到了自己定义的“object”类,你又没用到!