催收网站开发,淘客网站怎么做代理,骑士cms怎么从别的网站采集信息,晚上国网appvue2采用数据代理数据劫持发布订阅模式的方法。
在初始化vue实例时#xff0c;会把data对象和data对象的属性都添加到vm对象中#xff0c;通过object.defineProperty()进行数据代理#xff0c;用vm对象的属性来代理data对象的属性#xff0c;并在Observer类中递归遍历data…vue2采用数据代理数据劫持发布订阅模式的方法。
在初始化vue实例时会把data对象和data对象的属性都添加到vm对象中通过object.defineProperty()进行数据代理用vm对象的属性来代理data对象的属性并在Observer类中递归遍历data对象对data对象中的每个属性都进行数据劫持都指定一个getter、setter。
例外的对于数组不能通过object.defineProperty()进行数据代理因为监听的数组下标变化时会出现数据错乱问题所以数组是调用数组重写的原生方法来实现响应式。 当通过vm对象修改data对象中的属性时会触发data属性的setter方法然后触发它Dep实例的notify方法进行依赖分发通知所有依赖的Watcher实例执行内部回调函数。最后会触发renderWatcher回调会重新执行render函数重新对比新旧虚拟DOM重新渲染页面。【Watcher回调是异步任务它的执行会遵循事件循环机制且重复的Watcher回调不会放到任务队列中所以多次重复数据更新时只会重新渲染一次页面】。
当通过vm对象读取data对象中的属性时会触发data属性的getter方法然后触发它Dep实例的depend方法进行依赖收集。 当data对象中数组元素发生变化时会调用数组重写的原生方法然后触发它Dep实例的notify方法进行依赖分发通知所有依赖的Watcher实例执行内部回调函数。最后会触发renderWatcher回调会重新执行render函数重新对比新旧虚拟DOM重新渲染页面。
当读取data对象中数组元素时会触发数组的getter方法然后触发它Dep实例的depend方法进行依赖收集。