关于深拷贝和浅拷贝

简单来说
对象的浅拷贝就是一个改变的时候另一个也改变 ,它只拷贝一层对象的属性
对象的深拷贝就是一个改变的时候另一个不改变,两个对象对应两个不同的地址
先写写浅拷贝:

		var obj1={"name":"gao"};
        var obj2 = obj1;
            obj1.name ="wang";

        console.log("obj1",obj1);
        console.log("obj2",obj2);

在这里插入图片描述
可以看到obj1和obj2是一样的 同时更改obj1的时候obj2也是会跟着改变的,因为它们只拷贝了对象的属性

再写写深拷贝:
深拷贝的写法有很多,最基础的就是下面这种

		var obj3 ={"age":18};

        var obj4={};
            obj4.age = obj3.age;
            obj3.age=99999;

            console.log("obj3",obj3)
            console.log("obj4",obj4);

在这里插入图片描述
这时候就可以看到,在更改obj3的时候,obj4并没有变化,这就是最简单的深拷贝。
当然深拷贝还有其他的写法,比如——递归的方法

		var obj={
            "name":"gao",
            "age":18,
            "list":{
                "title":"新闻"
            }
        }
        obj.__proto__.say=function(){};


        // 深拷贝函数 --     创建 新对象 循环赋值 
        // 如果属性值 是对象  创建 新对象 循环赋值 
        
        function deepCopy(obj){
            var copyObj={};

            for(var key in obj){
                if(obj.hasOwnProperty(key) == true ){

                    if(obj[key] instanceof Object ){

                        copyObj[key]= deepCopy(obj[key])
                    }else{
                        copyObj[key]=obj[key]
                    }
                }
            }


            return copyObj;
        }


        var o2= deepCopy(obj)

        obj.list.title="娱乐"
        console.log(obj);
        console.log(o2);

还有转字符串的方法

		var obj={
                    "name":"gao",
                    "age":18,
                    "list":{
                        "title":{
                            "a":"b"
                        }
                    },
                    "run":function(){

                    }
                }
        obj.__proto__.say=function(){};

        // JSON.stringify 没有原型链 
        var obj2 =  JSON.parse( JSON.stringify(obj) );

            obj.name ="wang";
            obj.age ="wang";
            obj.list.title.a ="ssss";


            console.log(obj);
            console.log(obj2);

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值