function reactive(obj) {}
function effect(fn) {}
const user = reactive({name: 'poetries'})
effect(() => {console.log('name', user.name)})
user.name = '张三'
setTimeout(()=>{ user.name = '李四'})
```**答案**
```js
var fns = new Set()
var activeFn
function reactive(obj) {
return new Proxy(obj, {
get(target, key, receiver) {
const res = Reflect.get(target,key,receiver)
if(typeof res === 'object' && res != null) {
return reactive(res)
}
if(activeFn) fns.add(activeFn)
return res
},
set(target,key, value, receiver) {
fns.forEach(fn => fn())
return Reflect.set(target, key, value, receiver)
}
})
}
function effect(fn) {
activeFn = fn
fn()
}
var user = reactive({name: 'poetries',info:{age: 18}})
effect(() => {console.log('name', user.name)})
user.name = '张三'
setTimeout(()=>{ user.name = '李四'})