浅拷贝
- 浅拷贝、两个对象共用一个容器,当通过其中一个对象改变容器中的内容的时候,另一个对象的内容也会改变
var guiqi = { //站街面板
level: 100,
zb: {
wuqi: '太极天帝剑',
yifu: '大幽魂上衣',
erhuan: '军神耳环'
},
power: 3000,
zhili: 5000
}
var guiqi_linshi = guiqi; //进图面板
guiqi_linshi.zhili += 30000;
console.log(guiqi.zhili)
深拷贝
- 深拷贝 两个对象都有自己的容器,给第二个对象一个空的容器, 把对一个对象的容器里面的内容,通过for循环添加到第二个容器里面,两个对象都拥有独立的容器,当改变其中的一个对象的内容时,另一个对象不会受到影响。
var obj1 = {
name: '王小明',
age: 22,
skill: [
'刀魂之卡赞',
'瘟疫之罗刹',
'冥炎之卡洛',
'第七鬼神怖拉修'
]
}
var obj2 = {};
for (var i in obj1) {
obj2[i] = obj1[i]
}
obj2.name = '李小丽';
console.log(obj1.name)
console.log(obj2)
console.log(obj2.name)
console.log(obj1)
obj2.skill[3] = '神官吉格降临';
封装深拷贝
var obj1 = {
name: '王小明',
age: 16,
xueke: [
'语文', '数学', '英语', '化学', '物理', '生物'
]
}
var obj2 = {}
function deepClone(oldObj, newObj) {
for (var i in oldObj) {
if (typeof oldObj[i] == 'object') {
newObj[i] = oldObj[i] instanceof Array ? [] : {}
deepClone(oldObj[i], newObj[i])
} else {
newObj[i] = oldObj[i];
}
}
}
deepClone(obj1, obj2)