【JS系列】 - 深拷贝/浅拷贝

77 阅读1分钟

浅拷贝封装:

    var obj = {
        name: 'zhangsan',
        age: 18
    }
    
    var obj2 = clone(obj);
    console.log(obj2); //{name: 'zhangsan', age: 18}
    
    function clone(origin, target){
        var target = target || {};
        for(var key in origin){
            if(origin.hasOwnProperty(key)){ //判断该属性是否为对象属性
                target[key] = origin[key];
            }
        }
        return target;
    }

深拷贝封装:

    var obj = {
        name: "zhangsan",
        age: 18,
        son: {
          name: "xiaozhang",
        },
      };

      var obj2 = DeepClone(obj);
      console.log(obj2); //{name: 'zhangsan', age: 18, son: {…}}

      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) {
              toStr.call(origin[key]) === arrType
                ? (target[key] = [])
                : (target[key] = {});
              DeepClone(origin[key], target[key]);
            } else {
              target[key] = origin[key];
            }
          }
        }
        return target;
      }