js运用递归实现浅拷和深拷贝

浅拷贝:不能拷贝对象中的复杂属性 如 数组 和 内部的引用对象

        //运用递归实现js的浅拷贝和深拷贝
        var obj1 = {
            name : 'zs',
            age : 18,
            dog:{
                name:'大黄',
                age:3
            }
        };

        var obj2 = {};

        //完成对象的拷贝   浅拷贝主要能拷贝一些基本的属性不能拷贝对象属性 当改变原对象改变所属对象的属性时拷贝的对象也会跟着改变
        for(var key in obj1){
            obj2[key] = obj1[key];
        }

        obj1.dog.name = "xxxxxxx"; //虽然上面 obj2 拷贝了  obj1 但是当obj1的所属对象发生改变时 obj2也会更正发生变化 这个就叫浅拷贝
        
        console.dir(obj2);

深拷贝:两个对象完全独立存在

       //对象1
    var obj1 = { name : 'zs', age : 18, dog:{ name:'大黄', age:3 }, cars:["qq","jeep"] };
     //对象2
var obj2 = {}; function deepCopy(source, target) { for(var key in source){ var item = source[key]; if(item instanceof Object){ target[key] = {}; //定义一个空的对象来接收拷贝的内容 deepCopy(item,target[key]); //递归调用 }else if(item instanceof Array){ target[key]=[]; deepCopy(item,target[key]); }else { target[key] = source[key]; } } } deepCopy(obj1,obj2); obj1.dog.name = "xxxxxxx"; console.dir(obj1); console.dir(obj2);

猜你喜欢

转载自www.cnblogs.com/gaoSJ/p/12727095.html