js基础之深拷贝与浅拷贝

 

拷贝的对象的属性类型的不同决定是深拷贝还是浅拷贝。

对象内部属性如果是值类型,可直接全部拷贝,如果是对象,需要另做处理。

 

浅拷贝代码:

var user={

    name:'小明',

    type:‘普通用户’,

    user_ID:'123',

    copy:function(){

        var temp={};

        for(var  i in this){

               temp[i]=this[i];       //直接拷贝属性

             };

         return temp;

      }

}

var wang=user.copy();

wang.name='小王';          //此时wang的name可改为小王,而user里的name还是小明,他们是独立的。

 

深拷贝代码:

//需要做的处理是使每个对象都有一个copy方法

function copy(){

    var temp={};

    for (var i in this){

          if(typeof this[i] ==='object'){

               temp[i]=this[i].copy();

           }else{

                temp[i]=this[i]; 

                }    

      }

      return temp;

}

var property={

    car:'法拉利',

    hourse:'海景房'

};

var user={

    name:'小明',

    type:‘普通用户’,

    user_ID:'123',

    property:property

};

user.copy=copy;

property.copy=copy;  // 使对象都具有copy方法

var wang=user.copy();

wang.name='小王';   

wang.property={car:'三轮',hourse:'地下室'}  ; //此时小王的property也将与小明的property不一样,他们也是独立的。若用浅拷贝处理,那小王与小明将共享property指向的地址,无论谁改动都会影响另外一个。

深拷贝:

js基础之深拷贝与浅拷贝