js对象/数组深度复制

今天碰到个问题,js对象、数组深度复制;之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下:

function clone(obj) {
        var a;
        if(obj instanceof Array){
            a=[];
            for(var i=0;i<obj.length;i++){
                a.push(clone(obj[i]))
            }
        }else if(obj instanceof Function){
            return eval('('+obj.toString()+')')
        }else if(obj instanceof Object){
            a={};
            for(var i in obj){
               a[i]=clone(obj[i])
            }
        }else {
            return obj;
        }
        return a;
    }

特意实验了下发现效果还不错:

var obj= {
       'name':['tom','lizi'],
       'age':{
           'xiaoming':{
               'nihao':'en'
           },
           'en':undefined,
           'h':function s() {
               var ggg={
                   'hell':'e'
               }
               console.log(ggg)
           }
       }
   }
   console.log(clone(obj));//!==obj
function xx() {
    var obj= {
        'name':['tom','lizi'],
        'age':{
            'xiaoming':{
                'nihao':'en'
            },
            'en':undefined,
            'h':function s() {
                var ggg={
                    'hell':'e'
                }
                console.log(ggg)
            }
        }
    }
    return obj;
}
console.log(clone(xx)()==obj)//false

如有问题欢迎指出

 

posted @ 2016-08-17 23:50  alkf  阅读(308)  评论(0编辑  收藏  举报