js 深拷贝

 

 

 

 


Object.prototype.num = 1; // 原型链顶端
var person1 = {
   name: 'ytao',
   age: 18,
   sex: 'male',
   height: 165,
   weight: 100,
   children: {
     first:{
       name: '张小一',
       age: 13
     },
     second:{
       name: '张小二',
       age: 12
     },
     third:{
       name: '张小三',
       age: 11
     },
   },
   car: ['Benz', 'Mazda']
 }

var person2 = deepClone(person1, person2);
person2.name = 'lisi';
person2.children.forth = {
  name: '张小四',
  age: 1
};
person2.car.push('BYD');


// 深拷贝
function deepClone(origin, target){
  var target = target || {},
      toStr = Object.prototype.toString,
      arrType = '[object Array]';
  for(var key in origin){
    if(origin.hasOwnProperty(key)){
      if(typeof(origin[key]) === 'object' && origin[key] !== null){
        if(toStr.call(origin[key]) === arrType){
          target[key] = [];
        } else {
          target[key] = {};
        }
        deepClone(origin[key], target[key]); // 递归处理
      }else{
       target[key] = origin[key];
      }
    }
  }
  return target;
}

console.log(person1);
console.log(person2);
posted @ 2019-09-28 13:43  蓝空之忆  阅读(173)  评论(0编辑  收藏  举报