On Tue, Nov 20, 2012 at 2:06 PM, Rick Waldron <waldron.r...@gmail.com> wrote: > On Tue, Nov 20, 2012 at 3:08 PM, Tab Atkins Jr. <jackalm...@gmail.com> > wrote: >> Nope, that's not good enough. For example, you have to do input >> cleanup (replacing lone surrogates with U+FFFD, escaping &, etc.) >> which affects whether two keys are "the same". This affects set()'s >> replacing behavior, and add()'s coalescing behavior. Heck, even >> without extra cleanup, just the fact that it requires string keys >> means you need to eagerly preserve the invariant - foo.set([1,2], >> 'bar') and foo.set('1,2', 'bar') should both set the same key. So, >> the stringifying must be eager. Additionally, you *must* override the >> plain method anyway, since (if the URLQuery is attached to a URL), it >> synchronously adjusts the underlying URL as well. >> >> However, if you do a normal subclass, then people can do silly things >> like "Map.prototype.set(query, key, val);", which would skip >> URLQuery's own set() method, avoiding the invariant preservation and >> the URL manipulation. >> >> We could avoid these problems by only "subclassing" in the sense that >> URLQuery.prototype = new Map(); (or Object.create(Map.prototype)), >> but not invoking the Map constructor and actually storing data in a >> closure-hidden internal Map, so instanceof would work but using Map's >> own methods wouldn't. > > > class URLQuery extends Map { > constructor(url) { > // parse the url into a "map", for now > // just pretend this is the result of parsing > // the url: > let parsed = [ ["a", "alpha"], ["b", "beta"] ]; > super(parsed); > } > getAll() { > // ... implementation details... > } > } > > let query = new URLQuery("http://example.com");
I'm not sure why you're suggesting this. Deferring to Map's built-ins for get(), etc. breaks the basic functionality of the object, as I explained in the quoted section immediately above your response. ^_^ ~TJ _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss