JS当中对象的深浅拷贝

JS对象的深浅拷贝

首先是浅拷贝

var obj={
            name:'小甜甜',age:24,say(){
                console.log(111);
            }
        }

        //浅拷贝,仅仅是指针给了另一个对象
        var obj1=obj;
        //console.log(obj1);        //name: "小甜甜", age: 24, say: ƒ
        obj1.name='小辣椒';
        // console.log(obj);      //name: "小辣椒", age: 24, say: ƒ
        // console.log(obj1);      //name: "小辣椒", age: 24, say: ƒ

深拷贝的方法,这里介绍三种:

深拷贝:两个对象之间没有任何关系,如果改变了一个,另一个不会受影响

        1、通过json实现,会造成方法丢失

承接上文代码,可以看到方法会丢失

var obj1=JSON.stringify(obj);
        obj1=JSON.parse(obj1);
        console.log(obj1);  //name: "小甜甜", age: 24

同样,如果给obj1修改里面的内容,obj是感受不到的

obj1.name='小番茄';
//obj感受不到变化
        console.log(obj);     //name: "小甜甜", age: 24, say: ƒ
        console.log(obj1);    //name: "小番茄", age: 24

           2、通过for-in遍历循环实现       

 var obj1={};
        for(var attr in obj){
            obj1[attr]=obj[attr]
        }
        console.log(obj1);     //name: "小甜甜", age: 24, say: ƒ

这时我们可以看到同样拷贝成功了,然后我们继续修改obj1,可以看到同样obj感受不到变化

//修改obj1
        obj1.name = '哈希';
        console.log(obj);     //name: "小甜甜", age: 24, say: ƒ
        console.log(obj1);     //name: "哈希", age: 24, say: ƒ

          3、使用Object.assign()实现

同样也是拷贝成功了,修改obj1时,同样obj不受影响

var obj1={};
        //将obj合并到obj1上
        Object.assign(obj1,obj);
        console.log(obj1);     //name: "小甜甜", age: 24, say: ƒ
        obj1.age=66;
        console.log(obj);       //name: "小甜甜", age: 24, say: ƒ
        console.log(obj1);      //name: "小甜甜", age: 66, say: ƒ

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值