10.9.JS-对象浅层克隆,深层克隆

322 阅读1分钟

1. 浅层克隆

function clone(target, origin) {
  var target = target || {};
  for (var prop in origin) {
    target[prop] = origin[prop];
  }
  return target;
}

2. 深层克隆

// 1. 判断是不是原始值
// 2. 判断是数组还是对象
// 3. 建立响应的数组或对象
function deepClone(target, origin) {
  var target = target || {},
    toStr = Object.prototype.toString,
    arrStr = "[object Array]";
  for (var prop in origin) {
    if (origin.hasOwnProperty(prop)) {
      if (origin[prop] != null && typeof(origin[prop]) == "object") {
        if (toStr.call(origin[prop]) == arrStr) {
          target[prop] = [];
        } else {
          target[prop] = {};
        }
        deepClone(target[prop], origin[prop]);
      } else {
        target[prop] = origin[prop];
      }
    }
  }
  return target;
}