改進版通過Json對象實現(xiàn)深復制的方法
更新時間:2012年10月24日 21:40:09 作者:
改進版通過Json對象實現(xià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();
因為還沒有全面測試過,歡迎拍磚!
相關文章
使用Json比用string返回數(shù)據(jù)更友好,也更面向對象一些
在面向對象的程序來講,它的可能性,編寫代碼不易出錯率也很重要,所以,建議在返回復雜字條符時,使用C#提供的Json,而不需要自己去拼寫JS返回的Json格式。2011-09-09深入javascript json QQ網(wǎng)頁登陸
下面是個類似QQ網(wǎng)頁登陸的一個對話框(DIV), js + json 動態(tài)生成.2009-07-07Javascript Jquery 遍歷Json的實現(xiàn)代碼
Javascript Jquery 遍歷Json的實現(xiàn)代碼,需要的朋友可以參考下。2010-03-03