深拷贝指的是对 对象属性所引用的对象全部进行新建对象的复制,以保证深复制的对象的引用,不包含任何原有对象或对象图上的任何对象,隔离出两个完全不同的对象图。
解决的办法有:
1.用jquery的extend方法,把对象合并到新的对象去,会返回一个深层次的副本。
2.使用JSON的序列化,var b = JSON.stringify(a); 在反序列化:JSON.parse(b);
//这个函数可以深拷贝 对象和数组
var cloneObj = function(obj){
var str, newobj = obj.constructor === Array ? [] : {};
if(typeof obj !== 'object'){
return;
} else if(window.JSON){
str = JSON.stringify(obj), //系列化对象
newobj = JSON.parse(str); //还原
} else {
for(var i in obj){
newobj[i] = typeof obj[i] === 'object' ?
cloneObj(obj[i]) : obj[i];
}
}
return newobj;
};
http://www.zhihu.com/question/23031215/answer/31944721
例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
var a={q:1,w:2,m:'k'};
/*var b=a;
b.w='mm';
console.log(a);
console.log(b);*/
console.log(JSON.stringify(a));
var c = JSON.parse(JSON.stringify(a));
c.w='yy';
console.log(a); //{q:1,w:2,m:'k'};
console.log(c); //{q:1,w:2,m:'yy'};
</script>
<script>
var a = {
q:1,
w:2,
e:3
}
function copyAndModify(oldObj, name, value) {
var newObj = oldObj;
newObj[name] = value;
return newObj;
}
var b = copyAndModify(a, 'q', 'q');
console.log(b);
</script>
<script>
function extend(to, from) {
for (var key in from) {
to[key] = from[key];
}
return to;
};
var a = {
q:1,
w:2,
e:3
};
var b = {};
extend(b, a);
a.q = 'q';
console.log(a.q); //q
console.log(b.q); //1
</script>
</html>