欢迎来到资源库(www.zyku.net)

JavaScript

当前位置:首页 > 网页制作 > JavaScript > 克隆

JS对象的深度克隆方法示例

时间:2017-03-16|栏目:JavaScript|点击:|我要投稿

js中创建的对象指向内存,所以在开发过程中,往往修改了一个对象的属性,会影响另外一个对象。

尤其是在angular框架中,dom是由数据驱动的,在增删改查对象的操作中,对象属性的继承关系是很让人头痛的!

我之前遇到的问题就是,在编辑页面,操作了对象数据,影响到了展示数据的展现!

我整理了两种深度克隆对象的方法,供大家参考!

首先var 一个假数据

var schedule = {"status":21,"msg":"ok","data":[{"name":"lemon","age":21,"contactList":{"phone":[152,153,154],"email":5295}},{"name":"lara","age":22,"contact":{"phone":152,"email":5295}}]}

方法1:

遍历自身,判断当前对象是obj还是list,克隆出新对象

function deepClone(obj)
  {
  var o,i,j,k;
  if(typeof(obj)!="object" || obj===null)return obj;
  if(obj instanceof(Array))
  {
  o=[];
  i=0;j=obj.length;
  for(;i<j;i++)
  {
  if(typeof(obj[i])=="object" && obj[i]!=null)
  {
  o[i]=arguments.callee(obj[i]);
  }
  else
  {
  o[i]=obj[i];
  }
  }
  }
  else
  {
  o={};
  for(i in obj)
  {
  if(typeof(obj[i])=="object" && obj[i]!=null)
  {
  o[i]=arguments.callee(obj[i]);
  }
  else
  {
  o[i]=obj[i];
  }
  }
  }
  return o;
  }
  var scheduleClone = deepClone(schedule)
  scheduleClone.data[0].contactList.phone[0] = 99999999999
  console.log('方法1 深度克隆')
  console.log(scheduleClone)
  console.log(JSON.stringify(schedule))
  console.log(JSON.stringify(scheduleClone))

方法2:

用js原生的json序列化的方式,简单粗暴!

  var scheduleClone2 = JSON.parse(JSON.stringify(schedule));
  console.log('方法2 深度克隆')
  console.log(scheduleClone2)
  scheduleClone2.data[0].contactList.phone[0] = 8888888
  console.log(JSON.stringify(schedule))
  console.log(JSON.stringify(scheduleClone2))

(资源库 www.zyku.net)

上一篇:JS实现页面打印功能

栏    目:JavaScript

下一篇:javascript-基本数据类型和转换

本文标题:JS对象的深度克隆方法示例

本文地址:https://www.zyku.net/js/1265.html

关于我们 | 版权申明 | 寻求合作 |

重要申明:本站所有的文章、图片、评论等内容,均由网友发表或上传并维护或收集自网络,仅供个人学习交流使用,版权归原作者所有。

如有侵犯您的版权,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:95148658 | 邮箱:mb8#qq.com(#换成@)

苏ICP备2020066115号-1

本网站由提供CDN加速/云存储服务