es6的Proxy深度监听对象字段改变的问题?

写了个代理发现 赋值 proxy.a = xxx的时候能响应到,但是proxy.o.aa = 2222就响应不到了,需要写个递归处理下,不会能帮忙写下代码吗?

const proxy = new Proxy({ a: 1, o: { aa: 1, bb: 2 } }, {
    get(target, key, receiver) {
        return Reflect.get(target, key, receiver);
    },
    set(target, key, value, receiver) {
        console.log(3333);
        return Reflect.set(target, key, value, receiver);
    },
})
阅读 6.5k
2 个回答
function _addProxy(obj){
        return new Proxy(obj,{
            get(target,key){
                console.log(`get ${key}`);
                return Reflect.get(target,key);
            },
            set(targte,key,value){
                console.log(`set ${key}`);
                return Reflect.set(targte,key,value);
            }
        })
    }
    function _addProxies(proxy,obj,key){
        Object.keys(obj).forEach(key=>{
            const value=obj[key];
            if(typeof value == 'object'){
                proxy[key]=_addProxy(value);
                _addProxies(proxy[key],value,key);
            }
        });
    }
    function addProxy(obj){
        const proxy=_addProxy(obj);
        _addProxies(proxy,obj);
        return proxy;
    }
    const obj={ a: 1, o: { aa: 1, bb: 2,cc:{dd:2} }};
    const proxy=addProxy(obj);
    proxy.o.aa = 2222
    proxy.o.cc.dd = 2222

这样试试

试试
proxy.o = Object.assign({},o, {aa:2222})

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题