javaScript深度克隆

javaScript深度克隆

在做项目的时候,需要用到克隆操作。但是查找发现javaScript并没有提供克隆的方法,这对于常年开发java的我来说,是很不方便的事情。查找资料的时候,发现JQuery自带exten方法是可以进行对象复制,但是克隆出的对象引用地址还是原对象地址,这样达不到我的需求。1.脱离原对象引用地址,开辟新地址,2.深度克隆对象,向下克隆对象属性。于是参考网上自行码了一个深度克隆方法。代码如下:

//判断类型
function isClassType(Obj){
    var clType=Object.prototype.toString.call(Obj);//[object  Object]
    return clType.substring(clType.indexOf(" ")+1,clType.length-1);
}
//深度克隆
function objClone(obj){
    var result;
    if(isClassType(obj)=='Object')//对象类型
        result={};
    else if(isClassType(obj)=='Array')//Array集合类型
        result=[];
    else
        return obj;
    //遍历并递归,深度克隆的关键
    for(x in obj){
            result[x]=objClone(obj[x]); 
    }
    return result;
}


var nl=null,         //null
    undefin,         //undefined
    num=1,           //number
    str="",          //string
    fun=function(){},//funcation
    map={a:1,b:2,c:3},//map
    map2={a:'a'},
    array=[map2,2,3];    //array
map.fun=fun;
map.num=num;
map.undefin=undefin;
map.nl=nl;
map.array=array;
var map1=objClone(map);
map1.a="test";
console.log(map);
console.log(map1);

 控制台查看克隆对象,如下:

javaScript深度克隆_第1张图片

我更改了map1的a属性,原对象map的a属性并没有改变,满足了我的脱离原对象引用地址的需求。map1属性下面的array属性也进行原封不动的克隆过来,满足了我的深度克隆需求。目前只是进行了简单的克隆测试,如果大家发现新的bug欢迎留言。

 

 

 

 

 

你可能感兴趣的:(javaScript)