Vue 依赖收集 引用数据类型原理分析

如果数据是引用数据类型,需要对数据进行额外的处理,处理分为对象和数组两种

1. 对象

每个对象处理之后,会添加一个__ob__的属性, __ob__下面有一个dep属性,dep就是存储watcher的地方。
为什么引用类型不能使用dep,因为dep只存在于defineReactive这个函数中,作为一个闭包形式的存在,__ob__.depVue.prototype.$setVue.prototype.$delete中都有使用到。

2. 数组

对数组而言,__ob__.dep的作用是用于对数组相关方法的重写,便于实现数组的响应式。

3. 依赖收集

对于引用类型而言,它自己本身也会收集一遍依赖

get() {            
    var value = val            
    if (Dep.target) {
        // 收集依赖进 dep.subs
        dep.addSub(Dep.target);
        // 如果值是一个对象,Observer 实例的 dep 也收集一遍依赖
        if (childOb) {
            childOb.dep.addSub(Dep.target)          
            if (Array.isArray(value)) {
                dependArray(value);
            }
        }
    }            
    return value
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值