改进版通过Json对象实现深复制的方法


Posted in Javascript onOctober 24, 2012

之前看到博客的关于Json对象的深复制方法,即

var obj = { 
sayName: function() { 
alert(this.name); 
}, 
name:'静水渊' 
};var cloneObj=JSON.parse(JSON.stringify(obj));cloneObj.sayName();

但这种方式,不能复制属性值是函数的属性,因此改进了方法,以下是具体代码:
var obj = { 
sayName: function() { 
alert(this.name); 
}, 
name:'静水渊' 
}; 
function clone(){ 
var str,newObj; 
str= JSON.stringify(obj, function(key, value) { 
return (typeof value == 'function' ? value.toString().replace(/^function(.*)/g, "jsonFunction$1") : value); 
}); 
newObj = JSON.parse(str, function (key, value) { 
if (/^jsonFunction(.*)/.test(value)) { 
var strFun = '('+value.replace(/^jsonFunction(.*)/, "function$1")+')'; 
value = eval(strFun); 
} 
return value; 
}); 
return newObj; 
} 
var cloneObj=clone(obj); 
cloneObj.sayName();

因为还没有全面测试过,欢迎拍砖!
Javascript 相关文章推荐
IE浏览器不支持getElementsByClassName的解决方法
Aug 27 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
如何高效率去掉js数组中的重复项
Apr 12 Javascript
JS实现HTML表格排序功能
Aug 05 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
Sep 05 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
Oct 09 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
ES7之Async/await的使用详解
Mar 28 Javascript
细说webpack6 Babel的使用详解
Sep 26 Javascript
ElementUI之Message功能拓展详解
Oct 18 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
分享15个Webpack实用的插件!!!
Mar 31 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
Oct 24 #Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
Oct 24 #Javascript
JavaScript window.document的属性、方法和事件小结
Oct 24 #Javascript
javaScript 删除字符串空格多种方法小结
Oct 24 #Javascript
javascript中input中readonly和disabled区别介绍
Oct 23 #Javascript
关于js new Date() 出现NaN 的分析
Oct 23 #Javascript
js Dialog 实践分享
Oct 22 #Javascript
You might like
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
js鼠标左右键 键盘值小结
2010/06/11 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
JS实现音乐钢琴特效
2020/01/06 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
Python爬取读者并制作成PDF
2015/03/10 Python
Python中常见的数据类型小结
2015/08/29 Python
深入浅析Python字符编码
2015/11/12 Python
python如何创建TCP服务端和客户端
2018/08/26 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
无工作经验者个人求职信范文
2013/12/22 职场文书
教育学习自我评价
2014/02/03 职场文书
实用的简历自我评价
2014/03/06 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
大学社团计划书
2014/05/01 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
镇创先争优活动总结
2014/08/28 职场文书
工作年限证明模板
2014/11/01 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
聘任书范文大全
2015/09/21 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
Python数组变形的几种实现方法
2022/05/30 Python