深入理解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)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。