Seems like this isn't really a Map? It'd be pretty confusing for something to pretend to be a Map but act in such coercive and side-effecty ways. Better to just obey the Map structural type, perhaps, to give people an interface they're used to while not pretending to be something you're not?
> -----Original Message----- > From: [email protected] [mailto:es-discuss- > [email protected]] On Behalf Of Tab Atkins Jr. > Sent: Monday, May 20, 2013 22:06 > To: es-discuss > Subject: Overriding Map/etc with get/set hooks? > > For the CSS Variables spec I need to define an object with arbitrary string > keys, with the initial set determined by the custom properties set in the > style > rule, and on modification I need to coerce the provided key to a string, and > then go mutate the style rule accordingly. When the style rule is mutated to > add/remove custom properties, I also need to mutate the exposed keys on > the object. (In other words, this object has a bidirectional link with a > style > rule; it just exposes a more convenient and specialized interface for custom > properties specifically.) > > Right now I'm defining this via the WebIDL getter/setter/etc hooks, which > ends up defining an "object map". This is bad practice, though, because > anything set on the prototype chain will show up as a > (non-own) key, potentially causing confusion. > > I'd like to convert this over to an ES Map, as that avoids the above issue and > gets me all the Map extras for free, which is nice. > However, I don't think it's currently possible to do what I need. > > Is it possible add appropriate hooks to the ES spec to let me define the > [[MapData]] via a spec, rather than as an initially-empty list of tuples that > get/set unconditionally read from? I need to be able to define in spec-ese > that the [[MapData]] tuples consist of some list of data from a style rule, > and > that whenever a value gets set, I first coerce the key to a string, and then > go > mutate the style rule instead of the [[MapData]] (it then picks up the > mutated data by virtue of being defined by the style rule). > > (One way to do this today is to subclass Map and provide my own > get/set/etc. functions, but I need to override a potentially-open set > (anything that doesn't directly lean on my overridden functions), and it > doesn't prevent people from directly twiddling my [[MapData]] by calling > Map.prototype.set.call() on my object.) > > Alternately: Proxies? Is that possible? What benefits/drawbacks come from > that? > > ~TJ > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

