- From: <bugzilla@jessica.w3.org>
- Date: Fri, 05 Feb 2016 19:50:08 +0000
- To: public-script-coord@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=29421 --- Comment #3 from Christophe Dumez <dchris@gmail.com> --- (In reply to Christophe Dumez from comment #2) > (In reply to Boris Zbarsky from comment #1) > > So the big web compat constraint here is that this should do the right thing: > > > > var perf = performance; > > > > needs to work. I believe in spec terms this ends up in > > http://www.ecma-international.org/ecma-262/6.0/#sec-object-environment- > > records-getbindingvalue-n-s which lands in > > http://www.ecma-international.org/ecma-262/6.0/#sec-get-o-p which will use > > the object associated with the object enviroment record (in this case the > > global) as "this". So for this part to work, no effort is needed on the > > part of IDL. > > > > You're correct that the current Firefox behavior makes this also work: > > > > Object.getOwnPropertyDescriptor(window, "performance").get.call() > > > > I tried this in a few other browsers, with the following results: > > > > 1) Chrome. Seems to not actually have accessor properties on the window > > yet. Presumably they're still updating to Web IDL for the window... In any > > case, Object.getOwnPropertyDescriptor(window, "performance") returns a value > > descriptor. > > > > 2) Safari. Has some bizarre setup where descriptors on the global have > > undefined get and no value, but stuff somehow still works. Basically, > > totally violates the ES spec. > > Yes, I work on WebKit and am currently fixing this issue. This is also why I > wanted the behavior of implicit 'this' for the global Window Object to be > clarified. > > On WebKit nightly, it does return getters/setters now but the following: > $ Object.getOwnPropertyDescriptor(window.__proto__, "performance").get.call() > throws a "TypeError: The DOMWindow.performance getter can only be used on > instances of DOMWindow" for now. > > > > > 3) IE11. This seems to put the properties on window.__proto__, not window. > > Subject to that constraint, > > Object.getOwnPropertyDescriptor(window.__proto__, "performance").get.call() > > works. > > > > 4) Edge. Object.getOwnPropertyDescriptor(window, "performance").get.call() > > works. > > > > Speccing the Firefox/Edge behavior makes some sense to me, especially > > because the only reason the bareword works otherwise is because it takes a > > weird path to the getter. > > Also, I think we should be clear about which window we should fall back to > when 'this' is null/undefined, in the case of subframes. E.g. > > otherWin = open("about:blank"); > locationGetter = Object.getOwnPropertyDescriptor(otherWin, "location").get; > locationGetter.call() > > should this be identical to: > locationGetter.call(otherWin) > or > locationGetter.call(window) > ? FYI, in this case, I would expect locationGetter.call() to behave the same way as locationGetter.call(window) as I think this is how it works in EcmaScript. However, Firefox seems to do locationGetter.call(otherWin) in this case. -- You are receiving this mail because: You are on the CC list for the bug.
Received on Friday, 5 February 2016 19:50:10 UTC