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