本帖最后由 13824597405 于 2022-9-19 21:42 编辑
响应式系统是通过 Object.defineProperty 把所有的数据转为getter/setter. - 在获取属性,触发 getter 时: 收集依赖 , 添加到依赖收集列表 deps
- 在设置属性,触发 setter 时: 触发之前的收集的依赖
简单的代码实现:
- /*用于依赖收集, deps回调列表*/
- let deps = []
- let data={
- test:"我是一个测试"
- }
- Object.defineProperty(data,"test",{
- /*获取的时候, 进行触发*/
- get(){
- deps.forEach(fn=> fn())
- },
- /*设置的时候, 进行依赖收集*/
- set(){
- deps.push(fn)
- }
- })
复制代码
在在Vue.js中给响应式属性添加一个 __ob__ 的属性用于证明属性是一个响应式的属性。
|