拷贝的意思就是复制对象,

浅拷贝只能复制某个对象的指针而不是复制对象本身,只能顾得上第一层,你在新的对象中修改了值,旧对象也会被改变的。

深拷贝就不会存在这个问题,不管你原来里面是什么东西,深拷贝过来就算改变了属性,你原来的对象属性也不会被改变。

实现方法 - 浅拷贝

function clone(origin, target) {
  var target = target || {}
  for (var key in origin) {
    if (origin.hasOwnPropeyty(key)) {
      target[key] = origin[key];
    }
  }
  return target;
}

实现方法 - 深拷贝

var obj = {
  name: '张三'
}

function deepClone(origin, target) {
  var target = target || {},
      ObjectToString = Object.prototype.toString,
      arrTypeof = '[object Array]';

  for (var key in origin) {
    if (origin.hasOwnProperty(key)) {
      if (typeof (origin[key]) === 'object' && origin[key] !== null) {
        ObjectToString.call(origin[key]) === arrTypeof ? target[key] = [] : target[key] = {};
        deepClone(origin[key], target[key]);
      } else {
        target[key] = origin[key];
      }
    }
  }

  return target;
}

var obj1 = deepClone(obj);
obj1.name = '李四';
console.log(obj, obj1);