对象之间存在引用关系,有时候会造成麻烦,我们现在来解决一下
对象和函数都存在引用关系
例1:
var a = 1;
var b = a;
b=9;
alert(a) // 1
alert(b) // 9
没问题 a 赋给 b
但是b 又重新赋值了。
例2:
var a = [1,2,3];
var b = a;
b.push(4);
alert(b) //1,2,3,4
alert(a) //1,2,3,4
<script>
// = 浅拷贝
// =
// =
// var fass = {
// a:10,
// b:'str'
// };
// //复制函数,不存在引用
// function capy(obj){//浅拷贝
// var json = {};
// for(var name in json){
// json[name] = obj[name];
// }
// return json;
// }
// var obj1 = capy(fass);
// //var obj1 = fass;直接引用的话会受到影响
// obj1.a = 20;
//
// alert(fass.a);//10
// =
// =
// =
//深拷贝
//使用知识点: 递归
var json = {
a:{"b":10},
b:{"c":"str"}
}
//var json2 = json;
function deepCapyy(obj){
if(typeof obj!='object'){return false}
var json1 = {};
for(var name in obj){
json1[name]=deepCapyy(obj[name]);
}
return json1;
}
var json2 = deepCapyy(json);
json2.a.b=20;
alert(json.a.b);
</script>