JavaScript深度克隆

参考:http://www.jb51.net/article/32015.htm 点击打开链接

            http://www.cnblogs.com/yichengbo/archive/2014/07/10/3835882.html  点击打开链接

           http://www.cnblogs.com/ginowang42/archive/2013/04/11/3014419.html 点击打开链接            

           http://web.jobbole.com/82517/  点击打开链接            

-------------------------------------------------------------------------------------------1-----------------------------------------------------------------------------------------

function cloneObject(obj){ 
var o = obj.constructor === Array ? [] : {}; 
for(var i in obj){ 
if(obj.hasOwnProperty(i)){ 
o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i]; 
}                             //如果对象的属性值为object的时候,递归调用deepClone,即再把某个值对象复制一份到新的对象的对应值中
                             //如果对象的属性值不为object的时候,直接复制参数对象的每一个键/值到新对象对应的键/值中
} return o; }
-------------------------------------------------------------------------------------------2-----------------------------------------------------------------------------------------

 如果是一个简单的数组,元素中没有引用类型的值,可以直接用array.concat();或者array.slice(0);来深度拷贝一个数组,这样简单又高效。数组的concat()和slice()本来就会生成一个新的数组,原来的数组不会受影响。但是要注意的是你要确保被拷贝的数组中元素中没有引用类型的值。 

-------------------------------------------------------------------------------------------3-----------------------------------------------------------------------------------------

这是另一种深度克隆的方法,很简单,很实用:

var s = JSON.stringify( obj ); 

var o = JSON.parse( s ); 

var deepClone = function (obj) {
    var _tmp,result;
    _tmp = JSON.stringify(obj);
    result = JSON.parse(_tmp);
    return result;
}
var obj1 = {family:{brother:"a",father:"b",mother:"c"},age:"27"};
var obj2 = deepClone(obj1);
obj1.family.brother = "d";
console.log(obj1);     //d
console.log(obj2);     //a



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值