面向对象(八)继承___ 01 拷贝属性(浅拷贝)

2017-02-25  本文已影响12人  凸小布

拷贝属性(浅拷贝)

存在问题:如果属性的值是引用类型的,那么子对象和父对象共享一块儿数据,修改了某一个对象,对另外一个对象有影响

拷贝属性(浅拷贝) 之 方式一for循环拷贝属性
<script>
    /*
       01for循环拷贝属性
           001提供两个对象
           002for循环拷贝属性
           003修改某一个对象
           004打印验证
    */
    var obj1 = {
        name:"hello",
        des:"des",
        friends:["哈哈", "呵呵", "哗啦"]
    };
    var obj2 = {};

    //for循环拷贝属性
    //赋值操作内部细节:是把右边变量(空间中)存储的值复制一份放在左边变量(空间中)
    for(var k in obj1){
        obj2[k] = obj1[k];
    }

    // 修改了某一个对象,对另外一个对象有影响???
    obj2.name = "你好啊";
    obj2.friends.push("共享了");

    console.log(obj1.friends);
    console.log(obj2.friends);

</script>
拷贝属性(浅拷贝) 之 方式二函数Object.assign()来实现 ES6之后才推出
<script>
    /*
        02函数来实现拷贝
            001提供两个或两个以上的对象
            002通过Object.assign(o, obj3);实现属性拷贝
            003修改某一个对象
            004打印验证
      参数:
      第一个参数是目标对象
      第二个,第三个参数是要拷贝属性的对象
    */
    var o = {};
    var obj1 = {name:"name"};
    var obj2 = {age:20};
    var obj3 = {car:{type:"飞船"}};

    Object.assign(o,obj2,obj1,obj3);
    console.log(o);

    obj3.car.type = '汽车';
    console.log(o);
</script>

存在问题:如果属性的值是引用类型的,那么子对象和父对象共享一块儿数据,修改了某一个对象,对另外一个对象有影响


上一篇下一篇

猜你喜欢

热点阅读