改进版通过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 相关文章推荐
JavaScript 开发规范要求(图文并茂)
Jun 11 Javascript
动态标签 悬停效果 延迟加载示例代码
Nov 21 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
Mar 27 Javascript
JS生成随机字符串的多种方法
Jun 10 Javascript
JavaScript常用脚本汇总(二)
Mar 04 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
Apr 19 Javascript
VUE使用vuex解决模块间传值问题的方法
Jun 01 Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 Javascript
Angular实现svg和png图片下载实现
May 05 Javascript
vue 实现 rem 布局或vw 布局的方法
Nov 13 Javascript
JavaScript中的各种宽高属性的实现
May 08 Javascript
微信小程序实现弹幕墙(祝福墙)
Nov 18 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 移除数组重复元素的一点说明
2008/11/27 PHP
收藏的PHP常用函数 推荐收藏保存
2010/02/21 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
phpize的深入理解
2013/06/03 PHP
微信支付的开发流程详解
2016/09/13 PHP
网站上面有这种切换效果
2006/06/26 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
python 高阶函数简单介绍
2021/02/19 Python
Python中Qslider控件实操详解
2021/02/20 Python
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
品质主管岗位职责
2014/03/16 职场文书
承诺书的格式范文
2014/03/28 职场文书
单位在职证明书
2014/09/11 职场文书
加强作风建设工作总结
2014/10/23 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
python代码实现扫码关注公众号登录的实战
2021/11/01 Python
为Centos安装指定版本的Docker
2022/04/01 Servers