美文网首页
面向对象(八)继承___ 01 拷贝属性(浅拷贝)

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

作者: 凸小布 | 来源:发表于2017-02-25 16:34 被阅读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>
    

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


    相关文章

      网友评论

          本文标题:面向对象(八)继承___ 01 拷贝属性(浅拷贝)

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