對象的深淺克隆
對象的淺克隆
var obj1 = { a : 10 };
var obj2 = {};
// 克隆 你有什么我有什么;
// 先去找到原對象里面每一個項(xiàng)數(shù)據(jù);
for(var attr in obj1){
// 給克隆對象賦值每一個數(shù)據(jù);
obj2[attr] = obj1[attr]
}
obj1.a = 30;
console.log(1,obj2);
通過遍歷 將obj1中的數(shù)據(jù)克隆到obj2當(dāng)中 這種克隆只能克隆到對象中的基本數(shù)據(jù)類型 也可以理解為 只能克隆到對象中的第一層 如果對象中還有對象那么使用此種克隆方式是無法實(shí)現(xiàn)完全克隆的
對象的深克隆
function clone(obj1,obj2){
for(var name in obj1){
if(typeof obj1[name] === "object"){ //先判斷一下obj[name]是不是一個對象
obj2[name]= (obj1[name].constructor===Array)?[]:{}; //我們讓要復(fù)制的對象的name項(xiàng)=數(shù)組或者是json
clone(obj1[name],obj2[name]); //然后來無限調(diào)用函數(shù)自己 遞歸思想
}else{
obj2[name]=obj1[name]; //如果不是對象,直接等于即可,不會發(fā)生引用。
}
}
return obj2; //然后在把復(fù)制好的對象給return出去
}
var obj1={"name":"文杰","age":18,"arr1":[1,2,3],"string":'aaa',"arr2":[4,5,6],"arr3":[{"name1":"胡繼"},{"job":"高級前端工程師"}]};
var obj2={};
res=clone(obj1,obj2)
console.log(res)
/*age: 18
arr1: (3) [1, 2, 3]
arr2: (3) [4, 5, 6]
arr3: Array(2)
0: {name1: "胡繼"}
1: {job: "高級前端工程師"}
length: 2
__proto__: Array(0)
name: "文杰"
string: "aaa"
__proto__: Object*/
此種是通過遞歸的方式,將對象進(jìn)行深克隆,即如果對象中存在對象,如果存在對象將會克隆