深入理解JavaScript中的对象复制(Object Clone)
JavaScript中并没有直接提供对象复制(ObjectClone)的方法。因此下面的代码中改变对象b的时候,也就改变了对象a。
a={k1:1,k2:2,k3:3};
b=a;
b.k2=4;
如果只想改变b而保持a不变,就需要对对象a进行复制。
用jQuery进行对象复制
在可以使用jQuery的情况下,jQuery自带的extend方法可以用来实现对象的复制。
a={k1:1,k2:2,k3:3};
b={};
$.extend(b,a);
自定义clone()方法来实现对象复制
下面的方法,是对象复制的基本想法。
Object.prototype.clone=function(){
varcopy=(thisinstanceofArray)?[]:{};
for(attrinthis){
if(!obj.hasOwnProperty(attr))continue;
copy[attr]=(typeofthis[i]=="object")?obj[attr].clone():obj[attr];
}
returncopy;
};
a={k1:1,k2:2,k3:3};
b=a.clone();
下面的例子则考虑的更全面些,适用于大部分对象的深度复制(DeepCopy)。
functionclone(obj){
//Handlethe3simpletypes,andnullorundefined
if(null==obj||"object"!=typeofobj)returnobj;
//HandleDate
if(objinstanceofDate){
varcopy=newDate();
copy.setTime(obj.getTime());
returncopy;
}
//HandleArray
if(objinstanceofArray){
varcopy=[];
for(vari=0,varlen=obj.length;i<len;++i){
copy[i]=clone(obj[i]);
}
returncopy;
}
//HandleObject
if(objinstanceofObject){
varcopy={};
for(varattrinobj){
if(obj.hasOwnProperty(attr))copy[attr]=clone(obj[attr]);
}
returncopy;
}
thrownewError("Unabletocopyobj!Itstypeisn'tsupported.");
}
以上这篇深入理解JavaScript中的对象复制(ObjectClone)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
