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);

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

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

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值