对象引用(深、浅拷贝)

//这个存在引用关系
            var a=[1,2,3];
            var b=a;
            b.push(4);
            alert(b);//1,2,3,4
            alert(a);//1,2,3,4
            //这个就不存在引用关系
            //b重新赋值了就会重开一个地址
            var a=[1,2,3];
            var b=a;
            b=[1,2,3,4];
            alert(b);//1,2,3,4
            alert(a);//1,2,3
            
            var obj1={a:10};
            var obj2=obj1;
            obj2.a=20;
            alert(obj1.a);//20;
            
            var obj1={
                a:10
            };
            function copy(obj){//浅拷贝
                var newOjb={};
                for(var attr in obj){
                    newOjb[attr]=obj[attr];
                }
                return newOjb;
            }
            
//如果上面是var obj1={a:{b:10}}就要进行深入的查找 function deepCopy(obj){//深拷贝 var newOjb={}; if(typeof obj1 !="object"){//终止条件 return obj1;//返回最初的10 } for(var attr in obj){ newOjb[attr]=deepCopy(obj1[attr]);//递归 } return newOjb; } var obj2=copy(obj); obj2.a=20; alert(obj1.a)//10

 

posted @ 2015-08-07 12:17  Mi文  阅读(144)  评论(0编辑  收藏  举报