标签:console 复制 osi 广州 变换 var 操作 ret blank
连接上一章节,点击这里查看
第一次的直接复制,第二次的函数调用,我们都只是完成了浅拷贝,只有第三次的函数实现了深拷贝
var obj1 = {
age: 18,
position: ["北京", "广州", "上海"],
name: {
first: {
a: 1,
b: 2
},
last: "lucy"
}
}
var obj2 = obj1; //直接赋值
obj2.name = { first: "mark", last: "lucy" }
console.log(obj1.name) //{first: "mark", last: "lucy"}
console.log(obj2.name) //{first: "mark", last: "lucy"}
再来测试一下
obj2.position=["北京"]
console.log(obj1.position) //["北京"]
console.log(obj2.position) //["北京"]
可以看出来,只要其中一个变换了,另外一个也是跟着变化的。再来看看第二个函数
function copy(obj) {
var res = {}
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
res[i] = obj[i]
}
}
return res
}
var obj1 = {
age: 18,
position: ["北京", "广州", "上海"],
name: {
first: {
a: 1,
b: 2
},
last: "lucy"
}
}
var obj2 = copy(obj1)
var obj2 = copy(obj1)
obj2.name={ss:"333"}
console.log(obj1.name) //{first: Object, last: "lucy"}
console.log(obj2.name) // {ss: "333"}
在obj2中,将obj2.name={ss:"333"},打印出来可以看到 obj1.name 保持不变,obj2.name发生了变化,还有与此类似的操作
obj2.position=["北京"]
console.log(obj1.position) //["北京", "广州", "上海"]
console.log(obj2.position) //["北京"]
但是当你这样子做的时候,是发生变化了的
obj2.position[0]="湖南"
console.log(obj1.position) //["湖南", "广州", "上海"]
console.log(obj2.position) //["湖南", "广州", "上海"]
标签:console 复制 osi 广州 变换 var 操作 ret blank
原文地址:http://www.cnblogs.com/yiyistar/p/7469116.html