是结合订阅发布模式,通过object.defineProperty来实现数据双向绑定。
- observer会对data里面所有的属性进行数据劫持和数据代理,给数据对象的某个值赋值,就会触发setter,那么就能监听到了数据变化。
- watcher是监听data里面所有的属性,当属性被改变之后才会被触发,自身必须有一个update()方法。
- compile对模版进行解析,将模板中的变量替换成数据,然后初始化渲染页面视图,添加监听数据的订阅者,一旦数据有变动,收到通知,就会去更新视图。
v-model只是双向数据绑定最直观的表现形式
Object.definePropery方法 是在对象上定义一个新的属性
里面的三个值分别是obj 对象
、 属性名
、属性描述
属性描述符
分为两种
1.数据描述符
Configurable 是否重新配置(布尔值)
Enumerable 是否可枚举(布尔值)
Value 默认值
Writable 是否可写(布尔值)
2.访问(存取)描述符
Get 回调函数 监听获取
Set 回调函数 监听设置
object.definproperty 是vue2.x核心语法,属于Es5语法
注意:
IE8不支持Es5,所以也就不支持 vue2.x