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的IE和Firefox兼容性集锦
Dec 11 Javascript
event.srcElement 用法笔记e.target
Dec 18 Javascript
jquery 元素相对定位代码
Oct 15 Javascript
给ListBox添加双击事件示例代码
Dec 02 Javascript
JavaScript实现页面无操作倒计时退出
Oct 22 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
10分钟掌握XML、JSON及其解析
Dec 06 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
Sep 20 Javascript
vue.js父子组件通信动态绑定的实例
Sep 28 Javascript
js实现掷骰子小游戏
Oct 24 Javascript
微信小程序wx.request的简单封装
Nov 13 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
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
php通用防注入程序 推荐
2011/02/26 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
2017/02/12 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
python3实现mysql导出excel的方法
2019/07/31 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
简短证婚人证婚词
2014/01/09 职场文书
全民健身日活动方案
2014/01/29 职场文书
婚前协议书范本
2014/04/15 职场文书
交通事故私了协议书
2014/04/16 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
初婚初育证明范本
2015/06/18 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
Python创建SQL数据库流程逐步讲解
2022/09/23 Python