DEV Community

Discussion on: Extending JSON for fun and profit

Collapse
 
gmartigny profile image
Guillaume Martigny

Very neat article with inspiring code. I never thought of your "private class member" with symbols, this is amazing (Why use Symbol.for tho ? It would allow access with instance[Symbol.for("name")] ?!.

Another question, why use Map for the classes dictionary ? Object literal would make a more readable code (IMO of course).

const createClassLookup = (scope = {}) => (name) =>
  scope[name] || (global || window)[name];
const classes = {
  Drone,
};
Collapse
 
krofdrakula profile image
Klemen Slavič

Actually, yeah, you're right... I should've used Symbol('name') instead. My bad! I'll fix the examples.

In the case of the classes lookup, you might have to have some mapping between the value of the $type property and the actual classname if they happen to not coincide. But really, there's no reason to pick Map over an object if you're just mapping strings to objects. I just like to use Map instead of POJOs as hashmaps when they become highly polymorphic, as it doesn't create hidden classes on mutation.