Object.definePropoty()方法有三个参数
第一个参数为:需要进行代理的目标对象 , target
第二个参数为:需要代理的这个对象中对应的"键"名 ,key
第三个参数为:{}一个配置项,这个配置项里面有一个get函数和一个set函数,当你对这个对象中的这个 value值进行操作的时候
比如,现在要拿到代理的对象中的一个属性,这个set函数就会执行并返回你想拿的那个属性,也就是相当于return target[key]
然后想要更改这个属性,那么他就会调用set函数,然后set函数接收一个参数,这个参数就是你修改之后的值,然后这个修改的值如果和上一次的值不一样,那么就更该这个value的值.
这个东西我进行了解的时候看的是vue2的源码;部分代码如下:
这个代码中其实是将这个对象中的每一个键值都进行了代理,当你取a值的时候其实a值已经准备好了,取b值的时候b值也准备好了.
他的值通过闭包得到了访问,然后,其实拿到是target中的这个值,更改的也是target中对应的值
这里涉及到的是一个闭包和一个引用数据类型的修改知识点