JavaScript之深度克隆(deepClone)

var obj = {
                name : 'abc',
                age : 18,
                sex : "male",
                card : ['card1','card2'],
                wife : {
                    name : "bcd",
                    son : {
                        name : "aaa"
                    }
                }
            }
            var obj1 = {};
            //判断是不是原始值
            //判断是数组还是对象 toString(建议使用) constructor instanceof(后两种跨域使用会出现问题) 
            //建立数组或对象
            //递归调用
            
            function deepClone(origin, target){
                var target = target || {}, //如果没有传入第二个参数,那么就自己创建一个对象
                toStr = Object.prototype.toString,
                arrStr = "[object Array]";  //[].toString()的返回值
                for(var prop in origin){
                    if(origin[prop] !=="null" && origin.hasOwnProperty(prop)){  //防止对象的值是null
                        if(typeof(origin[prop]) == "Object"){

                            target[prop] = (toStr.call(origin[prop] == arrStr)) ? [] : {};
                            deepClone(origin[prop],target[prop]);//递归调用
                        }else{
                            target[prop] = origin[prop];
                        }
                    }
                }
                return target;
            }

    deepClone(obj, obj1);

你可能感兴趣的:(javascript)