首页 > 其他 > 详细

深拷贝,浅拷贝

时间:2014-03-14 19:12:33      阅读:410      评论:0      收藏:0      [点我收藏+]

js

深拷贝:

bubuko.com,布布扣
function deepCopy(o){
    return JSON.parse(JSON.stringify(o));
}
var a = {a:1,b:2,c:3};
var b = deepCopy(a);
b.a = 4;
alert(a.a); //1        
alert(b.a); //4
bubuko.com,布布扣

这种方式很好理解,对一个Object对象而言,先使用内置的JSON.stringify()函数,将其转化为数组。此时生成的字符串已经和原对象没有任何联系了,再通过JSON.parse()函数,将生成的字符串转化为一个新的对象。它只能对Object对象实现深拷贝,对于Function等对象,JSON.stringify()函数会直接返回undefined。

Object中包涵Function类型,这种对象的深拷贝

bubuko.com,布布扣
function getType(o){
    return ((_t = typeof(o)) == "object" ? o==null && "null" || Object.prototype.toString.call(o).slice(8,-1):_t).toLowerCase();
}
function extend(destination,source){
    for(var p in source){
        if(getType(source[p])=="array"||getType(source[p])=="object"){
            destination[p]=getType(source[p])=="array"?[]:{};
            arguments.callee(destination[p],source[p]);
        }else{
            destination[p]=source[p];
        }
    }
}
var test={a:"ss",b:[1,2,3],c:{d:"css",e:"cdd"}};
var test1={};
extend(test1,test);
test1.b[0]="change"; //改变test1的c属性对象的d属性
alert(test.b[0]);  //不影响test,返回1
alert(test1.b[0]); //返回change
bubuko.com,布布扣

 

.net中的深拷贝和浅拷贝:ICloneable接口实现

浅拷贝拷贝:

 bubuko.com,布布扣

深拷贝实现:

bubuko.com,布布扣

 

使用流的方式拷贝出去

参考:http://book.51cto.com/art/201109/292343.htm

深拷贝,浅拷贝,布布扣,bubuko.com

深拷贝,浅拷贝

原文:http://www.cnblogs.com/wanglao/p/3598207.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!