On Tue, Nov 20, 2012 at 9:38 AM, Erik Arvidsson
<[email protected]> wrote:
> On Tue, Nov 20, 2012 at 9:25 AM, Domenic Denicola
> <[email protected]> wrote:
>> For URLQuery in particular, since it's a String->String map, why not just
>> use a plain-old-JavaScript-object with appropriate interceptions via a
>> proxy? This provides a much more idiomatic API:
>>
>> new URLQuery(object) stays the same
>> urlQuery.get(name) -> urlQuery[name][0]
>> urlQuery.getAll(name) -> urlQuery[name]
>> urlQuery.set(name, values) -> urlQuery[name] = values; use proxy here
>> urlQuery.add(name, values) -> urlQuery[name].push(...values); use proxy
>> here
>> urlQuery.has(name) -> Object.prototype.hasOwnProperty.call(urlQuery, name)
>
> That is not very nice.
>
>>
>> urlQuery.delete(name) -> delete urlQuery[name]
>> urlQuery.delete(name, value) -> if (urlQuery[name]) { urlQuery[name] =
>> urlQuery[name].filter(x => x !== value); }
>
>
> I think the main issue with using an API like this is that you will end up
> with conflicts between the storage space and the API space. In your proposal
> there are no API methods but as soon as you add one you are limiting the
> keys you can use. It seems very likely that you don't want this to throw
> when people try to concat this with a string, so you add a toString method.
> Now, what happens when you do urlQuery['toString'] or worse
> urlQuery['__proto__'] = 'huh'?
>
> This kind of problem is hurting people all the time when they use
> localstorage

Yes, a real object (or a Proxy exposing an object-like API) is likely
hostile here.  It's okay in very limited instances, but it prevents
you from extending the API beyond CRUD, requiring ugly workarounds
like what you have for .has() and the 2-arg .delete().

Plus, as URLQuery is actually a MultiMap, not a plain Map (but is
friendly to being treated as a plain Map), we already know we want to
exceed that basic API, with things like the 2-arg delete().

On that note, are there any active proposals for MultiMaps in tc39?
It would be great to align URLQuery's API with tc39's plans, if they
have any.

~TJ
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to