let deps=null
let reactions=[]
function handler(){
return {
get(target,key,descriptor){
if(deps){
reactions.push(deps)
}
return Reflect.get(target,key,descriptor)
},
set(target,key,value,descriptor){
Reflect.set(target,key,value,descriptor)
reactions.forEach(item=>item())
}
}
}
function walk(data,handler){
if(typeof data!='object') return data
for(let key in data){
data[key]=walk(data[key],handler)
}
return new Proxy(data,handler())
}
function autorun(fn){
deps=fn
fn()
deps=null
}
const data={
count:0
}
const store=walk(data,handler)
autorun(()=>{
console.log('hello ',store.count)
})
window.store=store