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


Posted in Javascript onMarch 16, 2017

本文实例讲述了JS对象的深度克隆方法。分享给大家供大家参考,具体如下:

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))

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js中字符替换函数String.replace()使用技巧
Aug 14 Javascript
javascript学习笔记(十九) 节点的操作实现代码
Jun 20 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
Nov 04 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
Dec 19 Javascript
浅谈jQuery事件绑定原理
Jan 02 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
Sep 09 Javascript
JS实现图片高亮展示效果实例
Nov 24 Javascript
jQuery插件实现适用于移动端的地址选择器
Feb 18 Javascript
微信小程序实现给循环列表添加点击样式实例
Apr 26 Javascript
jQuery实现的分页插件完整示例
May 26 jQuery
javascript实现点击按钮切换轮播图功能
Sep 23 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 28 Javascript
JS对象深度克隆实例分析
Mar 16 #Javascript
JS异步加载的三种实现方式
Mar 16 #Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 #Javascript
基于JavaScript实现滑动门效果
Mar 16 #Javascript
基于Vue2.0的分页组件
Mar 16 #Javascript
原生js实现验证码功能
Mar 16 #Javascript
基于vue实现多引擎搜索及关键字提示
Mar 16 #Javascript
You might like
php设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
PHP If Else(elsefi) 语句
2013/04/07 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
为原生js Array增加each方法
2012/04/07 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
python中文编码问题小结
2014/09/28 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
python获取地震信息 微信实时推送
2019/06/18 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
如何学习Python time模块
2020/06/03 Python
详解python变量与数据类型
2020/08/25 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
商务英语求职自荐信范文
2013/12/24 职场文书
杠杆的科学教学反思
2014/01/10 职场文书
办理信用卡工作证明
2014/09/30 职场文书
2014年售票员工作总结
2014/11/19 职场文书
贷款承诺书
2015/01/20 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书