JavaScript基于遍历操作实现对象深拷贝功能示例


Posted in Javascript onMarch 05, 2019

本文实例讲述了JavaScript基于遍历操作实现对象深拷贝功能。分享给大家供大家参考,具体如下:

function getType(o){
  var _t;
  return ((_t = typeof(o)) == "object" ? o==null && "null" || Object.prototype.toString.call(o).slice(8,-1):_t).toLowerCase();
}
function extend(destination,source){
  for(var p in source){
    if(getType(source[p])=="array"||getType(source[p])=="object"){
      destination[p]=getType(source[p])=="array"?[]:{};
      arguments.callee(destination[p],source[p]);
    }else{
      destination[p]=source[p];
    }
  }
}
var test={
  a:"ss",
  b:"dd",
  c:[
    {d:"css",e:"cdd"},
    {
      m:"ff",
      n:[
        {kk:"11",jj:"22"},
        {ll:"44"}
      ]
    }
  ]
};
var test1={};
extend(test1,test);
console.log(test);
console.log(test1);
test1.c[1].n[0].kk="change"; //改变test1的c属性对象的d属性
console.log(test);
console.log(test1);
console.log(test.c[1].n[0]);
console.log(test1.c[1].n[0]);

测试结果

JavaScript基于遍历操作实现对象深拷贝功能示例

从测试结果可以看到,通过使用这个遍历的方法,成功将对象test深拷贝复制一份,得到test1。并且更改test1对象的属性,并不会对test对象产生影响。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

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

Javascript 相关文章推荐
Javascript模板技术
Apr 27 Javascript
Jquery 1.42 checkbox 全选和反选代码
Mar 27 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
Jan 06 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
Dec 10 Javascript
js模仿hover的具体实现代码
Dec 30 Javascript
JS实现来回出现文字的状态栏特效代码
Oct 31 Javascript
uploadify多文件上传参数设置技巧
Nov 16 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 Javascript
vue实现的树形结构加多选框示例
Feb 02 Javascript
详解Vue调用手机相机和相册以及上传
May 05 Javascript
百度小程序自定义通用toast组件
Jul 17 Javascript
JavaScript函数定义方法实例详解
Mar 05 #Javascript
C#程序员入门学习微信小程序的笔记
Mar 05 #Javascript
JavaScript函数的4种调用方法实例分析
Mar 05 #Javascript
微信小程序保存多张图片的实现方法
Mar 05 #Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 #Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
Mar 05 #Javascript
es6数据变更同步到视图层的方法
Mar 04 #Javascript
You might like
CURL状态码列表(详细)
2013/06/27 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
Javascript编程之继承实例汇总
2015/11/28 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
JavaScript定时器实现的原理分析
2016/12/06 Javascript
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
讲解Python中if语句的嵌套用法
2015/05/14 Python
python图像处理之反色实现方法
2015/05/30 Python
Python Django view 两种return的实现方式
2020/03/16 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
护士求职推荐信范文
2013/11/23 职场文书
《长城》教学反思
2014/02/14 职场文书
通信工程求职信
2014/07/16 职场文书
模范教师事迹材料
2014/12/16 职场文书
财务稽核岗位职责
2015/04/13 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS