Le 19/11/2012 14:38, Boris Zbarsky a écrit :
On 11/19/12 2:36 AM, David Bruant wrote:
An ES6 proxy could do the trick here.

But then it's not a Map at all, right? It's a proxy for maybe a Map, maybe something else. In what sense would it be a Map at that point?
I initially suggested either objects or maps. ES6 proxy was a followup for the idea of objects.

I suppose the same goes for ES6 Map.
As Tab suggested, a Map subclass could certainly work

How close are "subclasses" to not being vaporware (both in spec and implementation terms)?
I don't understand what you mean by vaporware. ES6 Maps are a reality in Firefox and Chrome (behind a flag for the latter). Subclassing of ES6 maps will be possible as soon as ES6 classes do (which I admit are still unimplemented)... well... it's actually possible today with __proto__ I guess.


Speccing things in terms of vaporware makes them pretty hard to implement in actual implementations... Doesn't mean we shouldn't do it, but I'm a bit wary of it, in general.
It's still possible for the spec to define an API that maps (no pun) the ES6 Map API (and does some additional magic). For those who'd care enough, it'll be possible to make this object a map.
If not an ES6 map, the same API will be good enough to avoid API diversity.


The ordered part for objects wasn't true in ES5 (implementation specific
order), but is considered for ES6 [1] since all web engines do the same
order

Except they don't.  Here's a trivial example:

  var obj = {};
  obj["2"] = 5;
  obj["1"] = 0;

which is handled differently by different UAs. The "same order" bit is only true for property names that don't look like array indices. Per proposed spec you linked to, by the way, this will enumerate properties in the order "1" followed by "2".
Interesting, I thought the proposal was meant to capture de facto standard. Did UAs converge for that behavior recently? More specifically, what does IE9 do? (I guess oldIE are the ones diverging from the others?)


Of course nothing really stops pages from using url parameters whose names look like array indices. So if we want ordered here, we just can't use a object to do it.
Indeed. I have to admit, I was also worried about __proto__ and __defineGetter__ too, because they could have ended up being sources of security issues.

If it's an ES6 map or interoperable API, that's fine by me.

David

Reply via email to