对象的深复制和浅复制.


layout: post
title: "对象的浅复制和深复制"
date: 2017-03-28
categories: js


对象的深复制和浅复制.
浅度克隆:原始类型为值传递,对象类型仍为引用传递。
深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中

var a={name:'yy',age:26};
var b=new Object();

深复制
1.将对象下属性的值取出来赋给要复制的对象下的属性

b.name=a.name;
b.age=a.age;
a.name='xx';
console.log(b);//Object { name="yy", age=26}
console.log(a);//Object { name="xx", age=26} 

2.采用递归的方式

function deepClone(obj){
    var result={},
oClass=isClass(obj);isClass判断对象的什么类型   
 for(key in obj){
        var copy=obj[key];
        if(isClass(copy)=="Object"){
            result[key]=arguments.callee(copy);
        }else if(isClass(copy)=="Array"){
            result[key]=arguments.callee(copy);
        }else{
            result[key]=obj[key];
        }
    }
    return result;
}

简化的递归函数

Object.prototype.clone=function(){
 var o=(this.contructor===Array?[]:{});
for(var e in this){
o[e]=typeof this[e]==='object'?this[e].clone():this[e]
}
return o;
}

3.用JSON

     var str1=JSON.stringify(obj1);
    var obj2=JSON.parse(str1);

将对象先转换为字符串,再将字符串转换为数组

浅复制

b=a;
a.name='xx';
console.log(b);//Object { name="xx", age=26}
console.log(a);//Object { name="xx", age=26}

你可能感兴趣的:(对象的深复制和浅复制.)