美文网首页JavaScript < ES5、ES6、ES7、… >
JavaScript中的浅拷贝和深拷贝

JavaScript中的浅拷贝和深拷贝

作者: nomooo | 来源:发表于2019-03-24 14:08 被阅读19次

浅拷贝
把一个对象的地址拷贝到另一个对象中,指向相同,对象中的属性或方法都是一起拷贝过去的

    //浅拷贝,把一对象A中的内容直接拷贝到对象中B中
    var obj1={
      name:"风斯托罗斯基",
      age:20,
      car:["奔驰","宝马","奥拓"]
    };

    var obj2={};
    function extend(a,b) {
      //把a对象中的东西,拷贝到b对象中
      for(var key in a){
        b[key]=a[key];
      }
    }
    extend(obj1,obj2);


    console.dir(obj1);
    console.dir(obj2);

深拷贝
把一个对象中的属性,依次的,一个一个的复制到另一个对象中

 //深拷贝:把一个对象中的属性,依次的,一个一个的复制到另一个对象中
    var obj1={
      name:"风斯托罗斯基",
      age:20,
      car:["奔驰","宝马","奥拓"],
      dog:{
        name:"哮天犬",
        age:2,
        color:"黑色"
      }
    };

    var obj2={};
    //把a中的拷贝到b中
    function extend(a,b) {
      //遍历a这个对象中所有的属性
      for(var key in a){
        var item=a[key];//获取了a对象中的属性
        if(item instanceof Array){
          b[key]=[];//在b对象中添加一个属性,但是这个属性的类型是数组,
          extend(item,b[key]);
        }else if(item instanceof Object){
          b[key]={};
          extend(item,b[key]);
        }else{
          b[key]=item;
        }
      }
    }

    extend(obj1,obj2);
    console.dir(obj2);
    console.dir(obj1);

相关文章

网友评论

    本文标题:JavaScript中的浅拷贝和深拷贝

    本文链接:https://www.haomeiwen.com/subject/qtjevqtx.html