Search code examples
javascriptobjectes6-proxy

How to Know if a Proxy call/access is nested?


I'm working with JS Proxies for fun and have made decent progress. But currently it's all at a single level. What I would like is to have nested Proxies be returned if I'm making a nested call/access, otherwise just return the object.

// example calls/accesses
data.settings = {fire: true};

data.settings.fire // nested call
// returns true

data.settings // top level call
// returns {fire: true}

// the proxy code
const data = new Proxy({}, {
  get: function(target, property, receiver) {
    // how to figure out nestedCall?
    if (nestedCall) {
      return new Proxy(target[property], {
        get: function(subTarget, subProperty, subReceiver) {
          return 'nonsense, there is nothing nested here';
        }.
      });
    }
    else {
      return target[property];
    }
  },
});

Is this even possible?


Solution

  • Is this even possible?

    No, it is not possible to distinguish

    const val = data.settings.fire; // two accesses
    

    from

    const obj = data.settings; // one access
    const val = obj.fire; // another access
    

    and return a plain object, instead of a proxy for it, for .settings only in the second case.