js对象的深拷贝问题
2014-03-17 11:01
260 查看
在网上很多地方看到一个关于深拷贝的例子,但测试中发现一个问题
用 sObj typeof = "object"时,sObj可能是null,而null.constructor会报错
但例子很好
js对象深拷贝:
JavaScript代码
js对象深拷贝:
JavaScript代码
//对象和数组的深拷贝
Object.clone = function(sObj){
// if(typeof sObj !== "object") sObj可能是null,而null.constructor会报错
if(typeof sObj !== "object" || sObj == null){
return sObj;
}
var s = {};
if(sObj.constructor == Array){
s = [];
}
for(var i in sObj){
s[i] = Object.clone(sObj[i]);
}
return s;
}
js对象扩展:
JavaScript代码
//对象扩展,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]);
}
}
}
测试用例如下:
JavaScript代码
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的所有属性
用 sObj typeof = "object"时,sObj可能是null,而null.constructor会报错
但例子很好
js对象深拷贝:
JavaScript代码
js对象深拷贝:
JavaScript代码
//对象和数组的深拷贝
Object.clone = function(sObj){
// if(typeof sObj !== "object") sObj可能是null,而null.constructor会报错
if(typeof sObj !== "object" || sObj == null){
return sObj;
}
var s = {};
if(sObj.constructor == Array){
s = [];
}
for(var i in sObj){
s[i] = Object.clone(sObj[i]);
}
return s;
}
js对象扩展:
JavaScript代码
//对象扩展,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]);
}
}
}
测试用例如下:
JavaScript代码
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的所有属性
相关文章推荐
- JS对象浅拷贝与深拷贝问题实践
- 使用slice方法进行js对象拷贝 得到新的对象 不再互相干扰 解决引用变量的指向问题
- js对象深拷贝和淺拷贝
- 细品JS的寻址,闭包,对象模型和相关问题
- js中实现数组与对象的深拷贝
- js对象和继承的应用和问题解决
- 细品JS的寻址,闭包,对象模型和相关问题
- js对象浅拷贝和深拷贝详解
- js数组及对象的深拷贝
- JS对象的引用,对象的拷贝
- 怎么拷贝一个js函数或者对象的方法
- js对象的拷贝
- js中的拷贝问题
- 拷贝带引用计数的对象时要注意的问题
- js 数组对象的深浅拷贝
- C#中List<T>对象的深度拷贝问题
- C#中List<T>对象的深度拷贝问题
- 解决JS内存泄露之js对象和dom对象互相引用问题
- js实现对象深度拷贝
- JS 内存堆栈原理(注销引用对象后带来的问题)