【JavaScript】浅克隆与深克隆

 

var originObj = {
  name: "小明",
  array:["666","777","888"],
  object:{
    name:"lgq",
    prop:["good","beautiful","cool"],
    obj:{
      age:"18",
      sex:"boy"
    }
  }
}

var targetObj = {};

 

/**
* 浅克隆
*/

function clone(origin,target){

  var target = target || {};//target若不定义,默认为空{}

  for(var prop in origin){//枚举原始对象属性(数组同样适用只是数组的prop为下标0、1、2...)
    if(origin.hasOwnProperty(prop)){//判断属性是否是其本身的属性 返回true或false(为的是过滤其原型链上的属性)
      target[prop] = origin[prop]//原始对象属性clone至目标对象
    }
  }

  return target; 
}



/**
* 深克隆
*/

function deepClone(origin,target){

  var target = target || {},//target若不定义,默认为空{}
    toStr = Object.prototype.toString,//判断值是数组还是对象的方法
    isObj = "[Object Object]";

  for(var prop in origin){//枚举原始对象属性(数组同样适用只是数组的prop为下标0、1、2...)

    if(origin.hasOwnProperty(prop)){//判断属性是否是其本身的属性 返回true或false(为的是过滤其原型链上的属性)

      if(origin[prop] !== "null" && typeof(origin[prop]) == "object"){

        target[prop] = toStr.call(origin[prop]) == isObj ? {} : [];//判断值是否为对象,以此赋值

        deepClone(origin[prop],target[prop])// 递归再次判断执行

      }else{
        target[prop] = origin[prop] //原始对象属性clone至目标对象
      }
    }
  }

  return target; 
}

 

 

posted @ 2019-08-08 10:12  就是一位小学生  阅读(187)  评论(0编辑  收藏  举报