r/javascript • u/noeldemartin • 9d ago
JavaScript Magic Objects
https://noeldemartin.com/blog/programming-patterns-magic-objectsI just published a blog post to my website about a pattern I've been using for a while that I think you will find interesting (and probably very divisive!): Magic Objects.
class Parrot extends MagicObject {
__get(property) {
return `${property}! ${property}!`;
}
}
const parrot = new Parrot();
console.log(parrot.foo); // "foo! foo!"
console.log(parrot.bar); // "bar! bar!"
Basically, I'm borrowing the idea of Magic Methods from PHP and porting them to JavaScript. You've probably seen something like this done with proxies before, but I still like to use some OOP in my JavaScript, and I also came up with a way to make it work nicely with TypeScript.
It may seem a bit over the top at the beginning, but I've been using this for a while and I've found it very useful.
Let me know what you think!
10
Upvotes
5
u/CodeAndBiscuits 9d ago
Setting aside the whole PHP source question, what I'm struggling to figure out is what problem you're actually solving here. Less of a "should you?" And more of a "why would you?"
I know I'm biased here on this because I so often work as one of the first or early devs on a project that will ultimately be handed off, but even if I wasn't I think I would stand by the opinion that code should be "unsurprising" to a developer who is an expert in the language, even if they are new to the project. There's so much work already in learning and comprehending a code base that you're stepping into. Why invent unusual techniques that add more barriers to that process?