vue2.0 响应式编程分析demo
导读:vue2.0 使用了 Object.defineProterty 将data中的属性遍历并转化为getter 和 setter, 并且在getter中将使用数据的上下文进行一次收集,我们称之为依赖收集。 而在setter中就会触发依赖更新...
vue2.0 使用了 Object.defineProterty 将data中的属性遍历并转化为getter 和 setter, 并且在getter中将使用数据的上下文进行一次收集,我们称之为依赖收集。
而在setter中就会触发依赖更新的操作,让在模板中可能会有多处随该依赖变化,所以我们将所有地方都收集起来,等待更新的时候进行一次批量操作。
下面是demo演示
(function () {
let x;
let y;
let f = n =>
n * 100 + 200;
let active;
let onXChanged = function (cb) {
active = cb;
active();
active = null;
}
// 收集更多依赖
class Dep {
// 依赖收集,将响应依赖添加到deps中
constructor() {
this.deps = new Set();
}
depend() {
if (active) {
this.deps.add(active)
}
}
// 对当前deps中依赖一次执行
notify() {
this.deps.forEach(dep =>
dep())
}
}
let ref = initValue =>
{
let value = initValue;
let dep = new Dep();
return Object.defineProperty({
}
, "value", {
get() {
dep.depend();
return value;
}
,
set(newValue) {
value = newValue;
dep.notify()
}
}
)
}
x = ref(1);
onXChanged(() =>
{
y = f(x.value);
console.log(y);
}
);
x.value = 2;
x.value = 3;
}
)()
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: vue2.0 响应式编程分析demo
本文地址: https://pptw.com/jishu/655739.html
