Javascript Proxy构建所有嵌套的调用

时间:2019-03-22 21:16:56

标签: javascript

假设我有

const obj = {
    level1: {
        level2: {
            level3: {
                name: 'final-entry'
            }
        }
    }
}

const handler = {
    get: function(target, property) {
        console.log(property);
        if (typeof target[property] === 'object' && target[property] !== null) {
            return new Proxy(target[property], handler)
        } else {
            return target[property];
        }
    }
}
const proxy = new Proxy(obj, handler);

console.log(proxy.level1.level2.level3.name);

运行此命令给我

level1
level2
level3
name
final-entry

此代理将是一项分析服务。因此,我希望能够构建整个用法,即知道proxy.level1.level2.level3.name是按特定顺序调用的。

基本上,如果我要在跟踪器中执行proxy.level1.level2proxy.level1.level2.level3,我会得到level1.level2level1.level2.level3使用已完成的结果。

1 个答案:

答案 0 :(得分:0)

您可以将所有返回的对象递归包装到代理中:

 const proxify = obj =>  new Proxy(obj, {
   get(target, property, receiver) {
    console.log(property)
    const value = Reflect.get(target, property, receiver);
    if(typeof value === "object" && value !== null)
      return proxify(value);
    return value;
  }
});

const proxy = proxify(obj);