-
Notifications
You must be signed in to change notification settings - Fork 156
Open
Description
该 JS 文件中有 defineReactive 函数定义如下:
function defineReactive (obj, key, val) {
const dep = new Dep();
Object.defineProperty(obj, key, {
enumerable: true,
configurable: true,
get: function reactiveGetter () {
dep.addSub(Dep.target);
return val;
},
set: function reactiveSetter (newVal) {
if (newVal === val) return;
val = newVal;
dep.notify();
}
});
}
不太明白为什么要把 dep.addSub(Dep.target); 放到 get 方法里面呢?这样就会一定要读取过属性才会添加到订阅队列中,感觉 不太好。改成以下会不会好一些呢?
function defineReactive (obj, key, val) {
const dep = new Dep();
dep.addSub(Dep.target);
Object.defineProperty(obj, key, {
enumerable: true,
configurable: true,
get: function reactiveGetter () {
return val;
},
set: function reactiveSetter (newVal) {
if (newVal === val) return;
val = newVal;
dep.notify();
}
});
}
Metadata
Metadata
Assignees
Labels
No labels