Files
muuhd/resources/js_recipes/recipe - bottomless-javascript-class.md
Kim Ravn Hansen 5a5fd475d7 perms
2026-02-22 08:30:44 +01:00

952 B
Raw Blame History

Got it — youd like the chain of accessed properties to “remember” its path, so you can do things like:

console.log(foo.bar.baz.toString()); // "bar.baz"

You can extend the Proxy trick for that:

function Bottomless(path = []) {
  return new Proxy(() => {}, {
    get(_, prop) {
      if (prop === "toString" || prop === "valueOf") {
        return () => path.join(".");
      }
      return Bottomless([...path, prop]);
    },
  });
}

const foo = Bottomless();

console.log(foo.bar.baz.toString()); // "bar.baz"
console.log(foo.hello.world.toString()); // "hello.world"

Notes:

  • toString (and valueOf) are trapped so you can stringify naturally.
  • The chain isnt “real” objects anymore, but function proxies that track their path.
  • You could also add a .path property if you prefer structured access.

Want me to make it so it still supports assignment (foo.bar = 123) and path stringifying?