对象深复制

43 阅读1分钟

为什么要用到对象复制,和对象深复制,这就不说了。直接上代码

var obj={
    name:{b:1}
    }
function deepCopy(o){
       if(typeof o !== "object"){   
            return o;   
        }  
    var newObj={};
    for(var i in o){
        //alert(deepCopy(o[i]))
        console.log(deepCopy(o[i]))
        newObj[i]=deepCopy(o[i]);
 
        }
    return newObj;
 
    }
var obj2=deepCopy(obj);
obj2.name.b="d";
console.log("obj.name.b--------------"+obj.name.b)

下面来个腻害的,用jquery解决这个问题

var obj={
    name:{b:1},
    age:24
    }    
var obj2=$.extend(obj);
obj2.age=25;
obj2.name.b=2;
console.log("obj.age------------"+obj.age);//24
console.log("obj.name.b------------"+obj.name.b);//1

用jquery的继承,更改了新对象不会影响到以前对象 PS: zepto(1.4)的$.extend没有复制的作用

//更新于2016/6/13
//思路清晰写出来的代码就好看些
function clone(obj) {
        var arr = [],
            res = {};
        if (obj instanceof Array) {
            obj.forEach(function(item, i) {
                arr[i] = clone(item);
            })
            return arr;
        } else if (obj instanceof Object) {
            for (var j in obj) {
                res[j] = clone(obj[j]);
            }
            return res;
        } else {
            return obj;
        }

    }
    var map = {
        "name": "jack"
    };
    console.info(clone(map));

还有个黑科技 var _parentModel = JSON.parse(JSON.stringify(parentModel))