改進(jìn)版通過Json對(duì)象實(shí)現(xiàn)深復(fù)制的方法
更新時(shí)間:2012年10月24日 21:40:09 作者:
改進(jìn)版通過Json對(duì)象實(shí)現(xiàn)深復(fù)制的方法,需要的朋友可以參考下
之前看到博客的關(guān)于Json對(duì)象的深復(fù)制方法,即
var obj = {
sayName: function() {
alert(this.name);
},
name:'靜水淵'
};var cloneObj=JSON.parse(JSON.stringify(obj));cloneObj.sayName();
但這種方式,不能復(fù)制屬性值是函數(shù)的屬性,因此改進(jìn)了方法,以下是具體代碼:
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();
因?yàn)檫€沒有全面測(cè)試過,歡迎拍磚!
復(fù)制代碼 代碼如下:
var obj = {
sayName: function() {
alert(this.name);
},
name:'靜水淵'
};var cloneObj=JSON.parse(JSON.stringify(obj));cloneObj.sayName();
但這種方式,不能復(fù)制屬性值是函數(shù)的屬性,因此改進(jìn)了方法,以下是具體代碼:
復(fù)制代碼 代碼如下:
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();
因?yàn)檫€沒有全面測(cè)試過,歡迎拍磚!
相關(guān)文章

深入javascript json QQ網(wǎng)頁(yè)登陸
下面是個(gè)類似QQ網(wǎng)頁(yè)登陸的一個(gè)對(duì)話框(DIV), js + json 動(dòng)態(tài)生成.
2009-07-07 
用nodejs寫的一個(gè)簡(jiǎn)單項(xiàng)目打包工具
項(xiàng)目是模塊加載的,類似require.js的用法,所以簡(jiǎn)單寫了一個(gè)js打包工具
2013-05-05 
Javascript Jquery 遍歷Json的實(shí)現(xiàn)代碼
Javascript Jquery 遍歷Json的實(shí)現(xiàn)代碼,需要的朋友可以參考下。
2010-03-03