参考:http://www.jb51.net/article/32015.htm 点击打开链接
http://www.cnblogs.com/yichengbo/archive/2014/07/10/3835882.html 点击打开链接
http://www.cnblogs.com/ginowang42/archive/2013/04/11/3014419.html 点击打开链接
http://web.jobbole.com/82517/ 点击打开链接
-------------------------------------------------------------------------------------------1-----------------------------------------------------------------------------------------
function cloneObject(obj){
var o = obj.constructor === Array ? [] : {};
for(var i in obj){
if(obj.hasOwnProperty(i)){
o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i];
} //如果对象的属性值为object的时候,递归调用deepClone,即再把某个值对象复制一份到新的对象的对应值中
//如果对象的属性值不为object的时候,直接复制参数对象的每一个键/值到新对象对应的键/值中
} return o; }
-------------------------------------------------------------------------------------------2-----------------------------------------------------------------------------------------
如果是一个简单的数组,元素中没有引用类型的值,可以直接用array.concat();或者array.slice(0);来深度拷贝一个数组,这样简单又高效。数组的concat()和slice()本来就会生成一个新的数组,原来的数组不会受影响。但是要注意的是你要确保被拷贝的数组中元素中没有引用类型的值。
-------------------------------------------------------------------------------------------3-----------------------------------------------------------------------------------------
这是另一种深度克隆的方法,很简单,很实用:
var s = JSON.stringify( obj );
var o = JSON.parse( s );
var deepClone = function (obj) {
var _tmp,result;
_tmp = JSON.stringify(obj);
result = JSON.parse(_tmp);
return result;
}
var obj1 = {family:{brother:"a",father:"b",mother:"c"},age:"27"};
var obj2 = deepClone(obj1);
obj1.family.brother = "d";
console.log(obj1); //d
console.log(obj2); //a