观察者 Obeserver
把配置对象中的data的每个属性通过defineProperty数据拦截设置访问器方法,并将其放在vm函数实例上即this._data。当数据发生改变时,调用set的setter函数通知订阅器。
订阅器 dep
dep = {
subscribe: [subscriber,subscriber],
subscribe: […],
…
}
一个对象,每个vm上的_data数据对应一个属性,每个属性都对应着多个订阅者组成的数组。
订阅者 watcher
订阅者就是一个对象。它需要一个能创建能订阅者,能更新内容的构造函数。
解析器 compile
如果想要达到订阅的目的。
我们得知道是那个元素订阅了vm上的_data的那个数据变量。解析器能帮助我们解析view视图的元素,检查是否有v-model或者v-bind属性,有的话我们就可以创建一个订阅者并放在订阅器数组中。假如订阅者的元素为input 就可以传(订阅元素,this(即vm),订阅的数据变量,‘value’(改变视图的元素具有的属性))从而创建观察者实例,之后将它放在订阅池中。如果变量变化,通过通过 node.value = vm. _data[数据变量]更新视图。
收获
defineProperty中的 setter 和 getter是闭包
掌握了一种双向绑定的模式
更深入了解面向对象思想
如果未来理解的更通透,会更新。