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 相关文章推荐
Sample script that displays all of the users in a given SQL Server DB
Jun 16 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
JavaScript实现动态添加,删除行的方法实例详解
Jul 02 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
Oct 14 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
JS自动生成动态HTML验证码页面
Jun 14 Javascript
关于 angularJS的一些用法
Nov 29 Javascript
解决vue页面刷新或者后退参数丢失的问题
Mar 13 Javascript
vue实现验证码按钮倒计时功能
Apr 10 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
Jun 11 Javascript
原生JS封装vue Tab切换效果
Apr 28 Vue.js
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实现的在线人员函数库
2008/04/09 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
JavaScript 调试器简介
2009/02/21 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
python 模拟登陆github的示例
2020/12/04 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
新东网科技Java笔试题
2012/07/13 面试题
总经理岗位职责
2013/11/09 职场文书
企业统计员岗位职责
2013/12/13 职场文书
银行存款证明样本
2014/01/17 职场文书
2014年党课学习材料
2014/05/11 职场文书
文明城市创建标语
2014/06/16 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
女生抽烟检讨书
2014/10/05 职场文书
2015年企业新年寄语
2014/12/08 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
7个关于Python的经典基础案例
2021/11/07 Python