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 相关文章推荐
jQuery右键菜单contextMenu使用实例
Sep 28 Javascript
Javascript base64编码实现代码
Dec 02 Javascript
js中用window.open()打开多个窗口的name问题
Mar 13 Javascript
javascript实现playfair和hill密码算法
Dec 07 Javascript
jquery中JSON的解析方式
Mar 16 Javascript
javascript组合使用构造函数模式和原型模式实例
Jun 04 Javascript
jQuery实现的跨容器无缝拖动效果代码
Jun 21 Javascript
微信小程序 label 组件详解及简单实例
Jan 10 Javascript
Angular2学习教程之组件中的DOM操作详解
May 28 Javascript
微信小程序实现底部导航
Nov 05 Javascript
浅谈js中的bind
Mar 18 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 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
农民和部队如何穿矿
2020/03/04 星际争霸
提高php运行速度的一些小技巧分享
2012/07/03 PHP
PHP的全局错误处理详解
2016/04/25 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
python zip文件 压缩
2008/12/24 Python
使用python实现baidu hi自动登录的代码
2013/02/10 Python
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
python一键升级所有pip package的方法
2017/01/16 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
护士自我鉴定怎么写
2014/02/07 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
一年级学生期末评语
2014/04/21 职场文书
文案策划专业自荐信
2014/07/07 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
工作时间证明
2015/06/15 职场文书
承诺书的签字人,需不需要承担相应的责任?
2019/07/09 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python