argumernts 深度克隆

105 阅读1分钟

遍历对象 for(var prop in obj) 1.判断是不是原始值,是就直接拷贝 typeof() object 2.引用值判断是数组还是对象 3.建立相应数组或对象,把数组或对象当作一个新的要拷贝的。。。  递归

例子:对象obj1克隆对象obj

function deepClone(origin,target){
        var target = target || {},
        toStr = Object.prototype.toString,
        arrStr = '[object Array]';
        //开始遍历,但凡forin循环 用origin.hasOwnProperty(prop)判断,避免拿走原型链上的东西
        for(var prop in origin){
           if(origin.hasOwnProperty(prop)){
           	//引用值
           	if(typeof(origin[prop]  == 'object'){
               if(toStr.call(origin[prop]) == arrStr){
                  target[prop] = [];
 
             }else{
                  target[prop] = {};

             }
             deepClone(origin[prop],target[prop]);
            //原始值
           	}else{
           		target[prop] = origin[prop];

            }
          }
           	
      }
      return target;
              
 }