ue2响应式原理,简单来说是通过Object.defineProperty进行数据劫持,再通过发布订阅者模式通知对应的视图更新。
/**
* 数组方法拦截
*/
const arrayProto = []
const methodsList = [
'push',
'pop',
'shift',
'unshift',
'splice',
'sort',
'reverse'
]
methodsList.forEach(method =>{
def(arrayProto,method,function(){
const result = Array.prototype[method].apply(this,arguments)
switch(method){
case 'push': {
observer(arguments)
this.__ob__.dep.notify()
break }
}
return result
})
})
//新增对象属性
function def(obj,key,value,enumerable = false){
Object.defineProperty(obj,key,{
value,
enumerable,
writable:true,
configurable:true
})
}
/**
* 订阅发布器
* 每一个属性数据都有自己的订阅发布器
* 他被定义在defindReative方法中
*/
class Dep{
constructor(){
this.sub = []
}
depend()