深拷贝合并这块代码的疑问

来源:9-3 合并配置的设计与实现 - 配置合并策略(下)

安德鲁的小围巾

2021-11-05

http://img.mukewang.com/szimg/6184fb7e09bb27c809510608.jpg

这块代码是不是为了处理以下这样的情况的

config1

http://img.mukewang.com/szimg/6184fbc5097a909d07000358.jpg

config2

http://img.mukewang.com/szimg/6184fc17097affa602680173.jpg

如果不加这段判断逻辑,结果就成config2的test就把config1的test直接覆盖了,而不是 以下这样(正确的)

test:{

    a: '222',

    test:{

        a: '111'

    }

}

那么执行的时候config1里面外层test的a:111是不是往result里面拷贝了两次啊,第一次是result没有a:111的时候,第二次是发现遍历到test:{a: 222}result里面有a:111这个对象,然后又把 a:111 拷贝了一下(同样的key value覆盖),接着把a:222再拷贝过去覆盖掉a:111?然后再把config1 第二层的test:{a: 111}拷贝到result保留,毕竟config2的test只有一层。


写回答

1回答

ustbhuangyi

2021-11-07

就是在合并属性的时候,如果遇到属性的值是对象类型,就需要递归执行 deepMerge,如果直接赋值的话就是浅拷贝了

0
0

下一代前端开发语言 TypeScript从零重构axios

课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!

2631 学习 · 877 问题

查看课程