原型与原型链
所有原型链的终点都是 Object 函数的 prototype 属性 每一个构造函数都拥有一个 prototype 属性,此属性指向一个对象,也就是原型对象 原型对象默认拥有一个 constructor 属性,指向指向它的那个构造函数 每个对象都拥有一个隐藏的属性 __ proto __,指向它的原型对象
所有原型链的终点都是 Object 函数的 prototype 属性 每一个构造函数都拥有一个 prototype 属性,此属性指向一个对象,也就是原型对象 原型对象默认拥有一个 constructor 属性,指向指向它的那个构造函数 每个对象都拥有一个隐藏的属性 __ proto __,指向它的原型对象
实现一个监听器 Observer:对数据对象进行遍历,包括子属性对象的属性,利用 Object.defineProperty() 对属性都加上 setter 和 getter。这样的话,给这个对象的某个值赋值,就会触发 setter,那么就能监听到了数据变化。
实现一个解析器 Compile:解析 Vue 模板指令,将模板中的变量都替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,调用更新函数进行数据更新。
实现一个订阅者 Watcher:Watcher 订阅者是 Observer 和 Compile 之间通信的桥梁 ,主要的任务是订阅 Observer 中的属性值变化的消息,当收到属性值变化的消息时,触发解析器 Compile 中对应的更新函数。
实现一个订阅器 Dep:订阅器采用 发布-订阅 设计模式,用来收集订阅者 Watcher,对监听器 Observer 和 订阅者 Watcher 进行统一管理。