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

深入javascript json QQ網(wǎng)頁登陸
下面是個類似QQ網(wǎng)頁登陸的一個對話框(DIV), js + json 動態(tài)生成.
2009-07-07 
Javascript Jquery 遍歷Json的實現(xiàn)代碼
Javascript Jquery 遍歷Json的實現(xiàn)代碼,需要的朋友可以參考下。
2010-03-03