改進版通過Json對象實現(xiàn)深復制的方法
更新時間:2012年10月24日 21:40:09 作者:
改進版通過Json對象實現(xiàn)深復制的方法,需要的朋友可以參考下
之前看到博客的關(guān)于Json對象的深復制方法,即
var obj = {
sayName: function() {
alert(this.name);
},
name:'靜水淵'
};var cloneObj=JSON.parse(JSON.stringify(obj));cloneObj.sayName();
但這種方式,不能復制屬性值是函數(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();
因為還沒有全面測試過,歡迎拍磚!
復制代碼 代碼如下:
var obj = {
sayName: function() {
alert(this.name);
},
name:'靜水淵'
};var cloneObj=JSON.parse(JSON.stringify(obj));cloneObj.sayName();
但這種方式,不能復制屬性值是函數(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();
因為還沒有全面測試過,歡迎拍磚!
相關(guān)文章
Ajax+Json 級聯(lián)菜單實現(xiàn)代碼
Ajax+Json 級聯(lián)菜單實現(xiàn)代碼,需要的朋友可以參考下。2009-10-10
用JSON做數(shù)據(jù)傳輸格式中的一些問題總結(jié)
Json 憑借其自身的優(yōu)勢,在Web數(shù)據(jù)處理方面已經(jīng)占據(jù)了一定的位置,這段時間涉及到用Json做為數(shù)據(jù)傳輸格式的項目有3個,其中有部分頁面就采用了Json 數(shù)據(jù)傳輸格式, 這里我總結(jié)下這段時間采用這種方式的一些問題總結(jié)2011-12-12
淺談JsonObject中的key-value數(shù)據(jù)解析排序問題
下面小編就為大家分享一篇淺談JsonObject中的key-value數(shù)據(jù)解析排序問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12

