前言
不同于React的不可变数据,Vue的一套响应式机制成为Vue的一套核心原则,从2.x基于Object.defineproperty到3.0即将推出的proxy和reflect,弄懂这一套还是很有必要的。
2.x
首先,对于2.x中的响应式原理,官网已经有很详细的解释了,这里我们抛开整个响应式流程,只从JS的角度去研究一下。
let a = 2, obj = {
}
Object.defineProperty(obj,'a',{
get(){
console.log('get');return a},
set(v) {
a = v;console.log('set')}
})
obj.a
VM766:2 get
2
obj.a = 3
VM766:3 set
3
借用此特性,我们可以实现一个Vue的响应式更新的函数:
function bindReactive(target, key, value