Vuejs采用的基于依赖收集的观测机制
1 将原生的数据改造成可观测对象,一个可观测的对象可以被取值,也可以被赋值
2 在watcher的求值过程中,每一个被取值的可观测对象都会将当前的watcher注册为自己的一个订阅者,并成为当前watcher的一个依赖。
3 当一个被依赖的可观察对象被赋值时,它会通知所有订阅自己的watcher重新求值,并触发相应的更新。
Vuejs利用了ES5的object.defineProperty方法,直接将原生数据的对象的属性改造成getter和setter。(这是ES5的特性,所以Vue不支持IE8及以下版本的原因)。在这两个函数里面实现依赖的收集和触发,而且完美的支持嵌套的对象结构。对于数组,则通过包裹数据的可变的方法来监听数组的变化。使得vuejs的数据和操作原生的对象几乎没有区别。
1 Vue在初始化实例时将属性转化成getter/setter。 所以属性必须在data对象上才能让Vue转换它,这样才能让她响应
2 受现代js的限制Vue不能检测对象属性的添加或者删除
页面并不会因为delete 显示为undefined
3 实例创建后要添加响应属性的方法可以用$set