以下是对一个数据据进行深复制的一些方法
var util = {
clone : function(obj) {
if (typeof (obj) != 'object')
return obj;
var re = {};
if (obj.constructor==Array)
re = [];
for ( var i in obj) {
re[i] = util.clone(obj[i]);
}
return re;
}
};
方法二:
//对象和数组的深拷贝
Object.clone = function(sObj){
if(typeof sObj !== "object"){
return sObj;
}
var s = {};
if(sObj.constructor == Array){
s = [];
}
for(var i in sObj){
s[i] = Object.clone(sObj[i]);
}
return s;
}
方法三:
//对象扩展,tObj被扩展对象,sObj扩展对象
Object.extend = function(tObj,sObj){
for(var i in sObj){
if(typeof sObj[i] !== "object"){
tObj[i] = sObj[i];
}else if (sObj[i].constructor == Array){
tObj[i] = Object.clone(sObj[i]);
}else{
tObj[i] = tObj[i] || {};
Object.extend(tObj[i],sObj[i]);
}
}
}
三、说明:
我自己定义的list中没有定义constructor,所以执行sObj.constructor == Array会报错,我就修改为:
//对象和数组的深拷贝
Object.clone = function(sObj){
if(typeof sObj !== "object"){
return sObj;
}
var s = {};
if(sObj.constructor == Array){
s = [];
}
for(var i in sObj){
s[i] = Object.clone(sObj[i]);
}
return s;
}