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}