应该很多人面试都会被问到这个问题,现在趋势面试已经趋向于底层原理的刨底了,因为vue谁都会,你用vue做了一个项目,真的不能代表你对vue就很熟悉了,随着vue3.0的出现,双向数据绑定使用ES6的Proxy 作为其观察者机制,取代之前使用的Object.defineProperty。这篇文章我们先来说说怎么利用Object.defineProperty()去实现双向数据绑定的?
首先vue通过Object.defineProperty这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的,通过数据劫持,把data对象里面的每个数据读写化成getter&setter,在数据读和写的时候,通过发布订阅者模式,利用Dep阅读器依赖收集,当数据有变化的时候触发watch更新视图(watch初始化的时候要添加进Dep阅读器,通过触发Get()数据更新就可以触发watch监听数据变化)
以上均为个人理解,如有不对的地方请指正