<script>
let obj = {
count: 0
}
let watch;
let dep = []
function defindReactive(obj) {
for (let key in obj) {
let value = obj[key];
Object.defineProperty(obj, key, {
get() {
if (watch) {
dep.push(watch) // 依赖收集
}
return value
},
set(newValue) {
value = newValue
dep.forEach(watch => watch()); // 触发更新
}
})
}
}
defindReactive(obj)
let watcher = (fn) => {
watch = fn
fn()
watch = null
}
watcher(() => {
app.innerHTML = obj.count
})
watcher(() => {
console.log(obj.count);
})
vue2.0实现原理
最新推荐文章于 2023-02-16 18:16:31 发布