Files
muuhd/resources/js_recipes/recipe - bottomless-javascript-class.md
Kim Ravn Hansen 3f11ebe6dc rearrage_stuff
2025-09-16 11:26:40 +02:00

34 lines
952 B
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Got it — youd like the chain of accessed properties to “remember” its path, so you can do things like:
```js
console.log(foo.bar.baz.toString()); // "bar.baz"
```
You can extend the Proxy trick for that:
```js
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?