前端小白必備資料之對象克隆篇

對象的深淺克隆

對象的淺克隆

            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)行深克隆,即如果對象中存在對象,如果存在對象將會克隆

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容