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 相关文章推荐
javascript之函数直接量(function(){})()
Jun 29 Javascript
jQuery控制TR显示隐藏的几种方法
Jun 18 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
Jul 31 Javascript
基于原生JS实现图片裁剪
Aug 01 Javascript
angularjs项目的页面跳转如何实现(5种方法)
May 25 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
Feb 09 Javascript
总结javascript三元运算符知识点
Sep 28 Javascript
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
vue el-tree 默认展开第一个节点的实现代码
May 15 Javascript
小程序分享链接onShareAppMessage的具体用法
May 22 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 Javascript
JavaScript缓动动画函数的封装方法
Nov 25 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
索尼ICF-SW100收音机评测
2021/03/02 无线电
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
php 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
php自定义hash函数实例
2015/05/05 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
点图片上一页下一页翻页效果
2008/07/09 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
a标签置灰不可点击的实现方法
2017/02/06 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python中实现指定时间调用函数示例代码
2017/09/08 Python
Python实现学生成绩管理系统
2020/04/05 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
Python气泡提示与标签的实现
2020/04/01 Python
环境科学专业个人求职信
2013/12/15 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
工程合作意向书范本
2015/05/09 职场文书
Python中文纠错的简单实现
2021/07/07 Python