Vue工作机制
依赖收集与追踪
发布、订阅模式
Object
Array
与Object不同,通过方法来改变内容,所以通过创建拦截器去覆盖数组原型实现追踪变化
不污染全局Array.prototype,只针对需要侦听变化的数组,使用proto覆盖原型方法
在拦截器中,向依赖发消息,依赖数组保存在Observer实例上
__ob__:
- 标记数组是否被侦听,并保证只侦听一次
- 通过__ob__拿到Observer实例上保存的依赖数组
对每个元素都转化响应式并侦听
对push、unshift、splice添加的新数据侦听
无法拦截数组特有语法
可拦截方法:
- push
- pop
- shift
- unshift
- splice
- sort
- reverse
编译
简单编译流程:解析器->优化器->代码生成器