vue响应式数据的原理

  • (1)、核心点: Object.defineProperty
  • (2)、默认 Vue 在初始化数据时,会给 data 中的属性使用 Object.defineProperty 重新定义所有属 性,当页面取到对应属性时。会进行依赖收集(收集当前组件的watcher) 如果属性发生变化会通 知相关依赖进行更新操作。
        Object.defineProperty(obj, key, {    
            enumerable: true,    
            configurable: true,    
            get: function reactiveGetter () {      
                const value = getter ? getter.call(obj) : val      
                if (Dep.target) {        
                    dep.depend() // ** 收集依赖 ** /        
                    if (childOb) {          
                        childOb.dep.depend()          
                        if (Array.isArray(value)) {            
                            dependArray(value)          
                        }        
                    }      
                }      
                return value    
            },    
            set: function reactiveSetter (newVal) {      
                const value = getter ? getter.call(obj) : val      
                if (newVal === value || (newVal !== newVal && value !== value)) {        
                    return      
                }      
                if (process.env.NODE_ENV !== 'production' && customSetter) {        
                    customSetter()      
                }
                    val = newVal      
                    childOb = !shallow && observe(newVal)      
                    dep.notify() /**通知相关依赖进行更新**/    
            }  
        })

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值