Skip to content

Instantly share code, notes, and snippets.

@zeusdeux
Created May 29, 2022 00:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zeusdeux/4514042db758cf5ca91cbd25f61936eb to your computer and use it in GitHub Desktop.
Save zeusdeux/4514042db758cf5ca91cbd25f61936eb to your computer and use it in GitHub Desktop.
Build a recursive proxy for any provided object
function createProxyHandler() {
const handler = {
get(target, prop, receiver) {
console.log('get>', target, prop, receiver)
if (prop === '_isProxy') {
return true
}
const value = Reflect.get(target, prop, receiver)
if (typeof value === "object" && value !== null && !value._isProxy) {
return new Proxy(value, createProxyHandler())
}
return value
},
set(target, prop, value, receiver) {
console.log('set>', target, prop, value, receiver)
return Reflect.set(target, prop, value, receiver)
}
}
return handler
}
const y = new Proxy({
a: 10,
b: {
c: [1, 2, 3],
d: { e: ["a", "b", { f: 200, g: { h: Symbol.for("brate") } }] },
},
}, createProxyHandler())
@zeusdeux
Copy link
Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment