Boris Zbarsky wrote:
On 8/15/12 5:08 PM, Brendan Eich wrote:
Usually window.[standardized property name] is last -- this matters
below.
I don't see how it matters at all, actually.
It could matter if there's a stray indexedDB global lurking (set by
script previously) but the var indexedDB = ... code in question wants
the msIndexedDB on IE.
It could matter if a browser is like recent Firefoxes, and it defines
both prefixed and unprefixed, but it also has the ES5.1 erratum fix so
the var indexedDB by itself overrides an inherited
Window.prototype.indexedDB. Then you want the prefixed one first.
Firefox is affected by this problem (e.g., the result of the var
declaration is undefined)
Chrome is not affected by this problem because their var creation
algorithm checks the prototype chain for an existing property name
No, Chrome is not affected because their IDL bindings put inherited
attributes on the global object as "own" accessors.
It's not affected for both reasons, at least in the last version of
Chrome I tested.
Chrome -- really V8 -- doesn't have the ES5.1 erratum fix?
That's true, but see above point about order of || terms.
Again, the order of the || terms doesn't matter. "X || undefined" and
"undefined || X" both evaluate to X as long as X is not falsy.
Not always -- see above.
No. Rather, the erratum at
https://bugs.ecmascript.org/show_bug.cgi?id=78 was already fixed by
Mozilla, Google, Opera, and I believe IE and Apple.
It's not fixed by Apple as of the 2012-08-06 WebKit nightly.
It does seem to be fixed in Chrome dev (22.0.1229.6). It's not fixed
in Chrome beta (21.0.1180.79).
Ah, thanks.
We'll see if and when the fix makes it to a final release, but in
the meantime what's out there in users' hands right now does not have
the fix.
Rats. This makes Firefox have *two* "kick me" signs taped to its back.
Also, WebIDL-reliant spec authors must be careful not to define get-only
accessors (readonly attributes) on the global object or interfaces from
which it inherits. This leads to the idea that the global object
defaults to [Replaceable] (which may be removed from WebIDL as explicit
qualifier syntax) and [Unforgeable] must be used selectively for some
few historic exceptions.
Note that there is a middle ground between [Replaceable] and
[Unforgeable], which is where most props on the global live right
now.... I suspect for web compat we may want to default all future
stuff to being [Replaceable] but grandfather in the existing
non-replaceable things.
Whatever compat gods require. Hard to know whom they'll zap if a change
is tried, or when data collection is "done". This often leads to taking
the safe route and complicating the spec (in this case grandfathering as
you suggest).
/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss