js对象之浅拷贝和深拷贝

浅拷贝依次遍历内容,依次赋值

    var p={
        name:"zhuyu",
        age:20
    };
    var k={   
    };
    console.log(p);
    console.log(k);
    for(let key in p){
        k[key]=p[key];
    }
    console.log(p);
    console.log(k);

使用Object.assign()方法。

<script>
       //方法二:使用Object原型方法
    var p={
        name:"zhuyu",
        age:20
    };
    var k={
        weight:"120",
        height:175   
    };

    console.log("方法二打印---------------------")
    Object.assign(k,p);
    console.log(p);
    console.log(k);
</script>

问题来,你这样依次拷贝出现的问题就是对象里面含有对象或者数组,Date等属性,又会出现只拷贝地址的情况,解决方法只有采用递归的方式拷贝。

<script>
     var p={
         name:"朱宇",
         age:20,
         body:["weight","height"],
         ass:{
             qiguan:["haha","xixi"],
             success:["ads","dad"]
         }
     };
     var stu={

     }
     //封装深拷贝函数
     function copy(fa,fb){
        for(let key in fb){
            if(!isObject(fb[key])){
                fa[key]=fb[key];
            }else{
                let tempb=fb[key];
                let tempa=new fb[key].constructor;
                copy(tempa,tempb);
                fa[key]=fb[key]
            }
        }
     }
     function isObject(obj){
        return obj instanceof Object
     }
     copy(stu,p);
     console.log(stu);
     console.log(p);
</script>


效果:

猜你喜欢

转载自blog.csdn.net/qq_39125445/article/details/87897768