- From: Brendan Eich <brendan@mozilla.org>
- Date: Fri, 10 Aug 2012 23:17:48 -0700
- To: Jonas Sicking <jonas@sicking.cc>
- CC: Allen Wirfs-Brock <allen@wirfs-brock.com>, Boris Zbarsky <bzbarsky@mit.edu>, public-script-coord@w3.org, es-discuss@mozilla.org
Jonas Sicking wrote: > One potential solution that I think we should keep in mind is to > declare that WebIDL properties*on global objects* doesn't go on the > prototype chain, but rather on the global objects themselves. That > seems like it'll reduce a lot of the foot guns since they will behave > much more like "normal" javascript properties. I.e. we'd get a model > that is much simpler for developers. +1 or more. > I feel like whatever we'll do, the interactions with 'var X' and > 'function X()' will end up getting complex when there are collisions > with properties on the prototype chain. Yes. All my fault for making objects be scopes. Sorry. But we should go with it, since object detection is a virtue (and var is needed for strict mode or just good hygiene). var detect = window.mozDetect || window.webkitDetect || ... || window.detect; with detect a get-only accessor must work. The simplest way to ensure this is to make all the window.* props "own". > We'd likely also have to allow some "readonly" properties to be > overwritten using arbitrary values. I.e. evaluating |indexedDB = 42;| > or |var indexedDB = 42;| in the global scope would actually change > window.indexedDB to the value 42. We end up having to do that right > now anyway for a lot of properties since web pages otherwise break due > to name collisions with random global variables. Yes, so set as well as get accessor functions. > This also has the advantage that it's a change "only" on the WebIDL > side. So we'd be free to leave ES with fewer webcompat restrictions > when defining how to deal with var/function and properties on the > prototype chain. Cameron may have to take the hit. I had mistakenly thought we could stick to ES5.1 and fix SpiderMonkey, but it's just not so. > It also has the advantage that Chrome already does this so we have > some basis for thinking that this could be web compatible. (Though > Chrome does this for not just global objects, which is a different > topic). Could you say more? I can see the benefit in having an odd-man-out exception for globals only. Does the "own" promotion hurt elsewhere in WebKit's DOM bindings? /be
Received on Saturday, 11 August 2012 06:18:23 UTC