谈谈对Object.defineProperty的理解
在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里面的内容也一起进行修改
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)