在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针、引用、地址之类的,所以直接用"="就可以把一个对象复制给另外一个对象,如下代码:
代码1:
var i1 = 1;
var i2 = i1;
i2 = 2;
alert("i1:"+i1+",i2:"+i2);
输出结果:i1:1 , i2:2
但可能没有发现,这种“复制”用在对象(object)类型是“错误”的,因为这只是把对象的地址复制,所以如下代码会进行了一次“错误”的复制:
var o1 = {i : 1,s : "o1"};
var o2 = o1;
o2.i=2;
o2.s="o2";
alert("o1.i:"+o1.i+",o2.i:"+o2.i);
alert("o1.s:"+o1.s+",o2.s:"+o2.s);
输出:o1.i:2 , o2.i:2
可能你会问为什么代码1 可以复制,但 代码2 却没有复制?
function cloneAll(fromObj,toObj){
for(var i in fromObj){
if(typeof fromObj[i] == "object"){
toObj[i]={};
cloneAll(fromObj[i],toObj[i]);
continue;
}
toObj[i] = fromObj[i];
}
}
把fromObj对象复制到toObj