Vue的数据绑定机制

响应式对象

Vue2 通过 Object.defineProperty, Vue3 通过 Proxy 来劫持 state 中各个属性的 setter、getter,通过 getter 收集依赖。当 state 中的数据发生变动之后发布通知给订阅者更新数据。

关于 Object.defineProperty

这个函数接受三个参数,第一个参数是 obj, 表示要定义的属性对象, 第二个是定义属性名的key, 第三个参数接收一个对象,定义了要给属性所赋的值。

1
2
3
4
5
6
7
let obj = {};

Object.defineProperty(obj, 'key', {
__proto__: null, //,没有继承的属性
value: 'test'
})
// 就算通过 obj.key = 'test' 来重新赋值,依然不会改变 obj的原有属性
双向绑定

Vue 通过 v-modol 实现双向绑定, v-modol实际是 v:bind:xxxv:on:xxx的语法糖。
当触发元素对应事件的时候(例如input,change)时更新数据(ViewModel),当数据更新完毕同步到对应元素(View)的属性上