observer类:constructor(value:any){this.value=valuethis.dep=newDep()this.vmCount=0def(value,'__ob__',this)if(Array.isArray(value)){constaugment=hasProto?protoAugment:copyAugmentaugment(value,arrayMethods,arrayKeys)this.observeArray(value)}else{this.walk(value)}}这里的dep属性有什么作用呢?我知道defineReactive方法会改造gettersetter方法来收集依赖和通知watcher,但是这个方法里都是用的闭包里的dep来操作的,为什么还要在observer里面声明一个dep实例呢?
2 回答
偶然的你
TA贡献1841条经验 获得超3个赞
这个dep属性是在Vue.$set和$delete中用到的。如$set中倒数第二行代码exportfunctionset(target:Array|Object,key:any,val:any):any{ if(process.env.NODE_ENV!=='production'&&(isUndef(target)||isPrimitive(target))){warn(`Cannotsetreactivepropertyonundefined,null,orprimitivevalue:${(target:any)}`)}if(Array.isArray(target)&&isValidArrayIndex(key)){target.length=Math.max(target.length,key)target.splice(key,1,val)returnval}if(keyintarget&&!(keyinObject.prototype)){target[key]=valreturnval}constob=(target:any).__ob__if(target._isVue||(ob&&ob.vmCount)){process.env.NODE_ENV!=='production'&&warn('AvoidaddingreactivepropertiestoaVueinstanceoritsroot$data'+'atruntime-declareitupfrontinthedataoption.')returnval}if(!ob){target[key]=valreturnval}defineReactive(ob.value,key,val)ob.dep.notify()//这里的dep指的就是楼主所问的dep属性returnval}
添加回答
举报
0/150
提交
取消