美文网首页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