谈谈对Object.defineProperty的理解

发布时间 2023-08-02 12:05:01作者: 帅到被人砍的阿豪

在Vue2实现数据和页面的绑定和双向绑定使用的就是Object.defineProperty方法,然后看到Vue-Router源码的时候发现了一个有趣的事情.就是:
通过代理B得到了A对象,其实是相当于B和A其实都指向了同一个地址值,我们在使用Vue的时候去改变或者拿取值一直都是通过A去拿的,在Vue里面他代理两次,这就意味着我们永远都没办法去拿到最最最一开始的那个值,因为他自己代理他自己.拿不到最一开始的那个值了.这就意味着我们在Vue里面所有的拿或取都是通过A对象进行的.如果B对象一下子整体被改变了,A是不会发生变化的.虽然B不指向原来的地址了,但是还有A去指向这个地址,所以这个地址不会别回收.
这个问题是在看Vue-Router源码的时候调用了Vue.util.defineReactive()方法时候,页面不实时刷新发现的.在跳转新的页面的时候,虽然被代理的值变了,但是吧页面没有进行刷新,原因就是像上面所说的那样.B的指向改变了但是A还是指向原来的所以页面不会刷新,解决方法就是在B改变的同时将A里面的内容也一起进行修改