首页 > 编程语言 > 详细

【JavaScript】浅克隆与深克隆

时间:2019-08-08 10:51:58      阅读:194      评论:0      收藏:0      [点我收藏+]


var originObj = {
  name: "小明",
  array:["666","777","888"],
  object:{
    name:"lgq",
    prop:["good","beautiful","cool"],
    obj:{O
      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;
}

 

【JavaScript】浅克隆与深克隆

原文:https://www.cnblogs.com/arvin-LGQ/p/11319537.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!