Oops, yup. Fixed.
Your solution is pretty clever, though it leaks memory like a sieve. To get around that, you end up needing something like weak maps.
Once you have those, when you do the pattern you suggest, you are basically doing metaprogramming and reinventing the very idea of an "object" yourself from scratch.
That can be fun to do, but to me it starts to feel less like expressing "the same thing" and more like implementing a new language that lets you express the same thing. Just because I can implement a GC in C, that doesn't mean C has a GC. :)