浅拷贝

  • 浅拷贝、两个对象共用一个容器,当通过其中一个对象改变容器中的内容的时候,另一个对象的内容也会改变
  1. var guiqi = { //站街面板
  2. level: 100,
  3. zb: {
  4. wuqi: '太极天帝剑',
  5. yifu: '大幽魂上衣',
  6. erhuan: '军神耳环'
  7. },
  8. power: 3000,
  9. zhili: 5000
  10. }
  11. var guiqi_linshi = guiqi; //进图面板
  12. guiqi_linshi.zhili += 30000;
  13. console.log(guiqi.zhili)

深拷贝

  • 深拷贝 两个对象都有自己的容器,给第二个对象一个空的容器, 把对一个对象的容器里面的内容,通过for循环添加到第二个容器里面,两个对象都拥有独立的容器,当改变其中的一个对象的内容时,另一个对象不会受到影响。
  1. var obj1 = {
  2. name: '王小明',
  3. age: 22,
  4. skill: [
  5. '刀魂之卡赞',
  6. '瘟疫之罗刹',
  7. '冥炎之卡洛',
  8. '第七鬼神怖拉修'
  9. ]
  10. }
  11. var obj2 = {};
  12. for (var i in obj1) {
  13. obj2[i] = obj1[i]
  14. }
  15. obj2.name = '李小丽';
  16. console.log(obj1.name)
  17. console.log(obj2)
  18. console.log(obj2.name)
  19. console.log(obj1)
  20. obj2.skill[3] = '神官吉格降临';

封装深拷贝

  1. var obj1 = {
  2. name: '王小明',
  3. age: 16,
  4. xueke: [
  5. '语文', '数学', '英语', '化学', '物理', '生物'
  6. ]
  7. }
  8. var obj2 = {}
  9. function deepClone(oldObj, newObj) {
  10. for (var i in oldObj) {
  11. if (typeof oldObj[i] == 'object') {
  12. newObj[i] = oldObj[i] instanceof Array ? [] : {}
  13. deepClone(oldObj[i], newObj[i])
  14. } else {
  15. newObj[i] = oldObj[i];
  16. }
  17. }
  18. }
  19. deepClone(obj1, obj2)