js对象深拷贝
- - ITeye博客在做一个前台页面你的时候用到了一个自己写的List对象,在进行深拷贝的时候参考了网上的代码:. //对象扩展,tObj被扩展对象,sObj扩展对象. Object.extend(a,b);//a获得了b的所有属性. 我自己定义的list中没有定义constructor,所以执行sObj.constructor == Array会报错,我就修改为:.
在做一个前台页面你的时候用到了一个自己写的List对象,在进行深拷贝的时候参考了网上的代码:
一、
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]);
}
}
}
测试用例:
var a = {};
var b = {"a":1,
"b":{"c":function(t){
alert(t);
}
},
"d":{"e":2,
"f":[1,4,5,7,9]
}
};
Object.extend(a,b);//a获得了b的所有属性
三、说明:
我自己定义的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;
}
原文链接: http://www.footya.com/?action=show&id=123