On Thu, Sep 3, 2009 at 8:12 AM, Travis Leithead<tra...@microsoft.com> wrote: >>> 2- property inheritance (regarding 4.4.3 [interface prototype objects]) > >>Is this for the accessor (getter/setter) introduced in ECMAScript 5? > > Yes and no. Before ES5, browser venders still have ways of getting the > getter/setter pair (__defineGetter__/ __lookupGetter__), so the scenario is > still relevant. The meta-point is that it's more about being able to improve > the utility of extending or replacing the behavior of these properties.
If Web IDL is going to mention the accessor property in ECMAScript, I agree it would be very practical to have accessor properties on the corresponding interface prototype objects. Is there any plan to specify ES5 (or maybe existing ES getter/setter implementation) binding in Web IDL? Best, - Shiki > > -Travis > > -----Original Message----- > From: Shiki Okasaka [mailto:sh...@google.com] > Sent: Wednesday, September 02, 2009 7:10 AM > To: Travis Leithead > Cc: public-webapps@w3.org; Cameron McCormack; Tony Ross; Adrian Bateman > Subject: Re: [WebIDL] Feedback on the August 30 Editor's draft > > Hi Travis, > >> 1- Mixing-in mixins (regarding 4.2.8 [PrototypeRoot], and sundry other >> places in the spec) > > This looks to be a reasonable solution for the problem Andrew and > Cameron discussed about to me. > >> 2- property inheritance (regarding 4.4.3 [interface prototype objects]) > > Is this for the accessor (getter/setter) introduced in ECMAScript 5? > > Regards, > > - Shiki Okasaka > > > On Tue, Sep 1, 2009 at 2:07 PM, Travis Leithead<tra...@microsoft.com> wrote: >> Cameron et al., >> >> >> >> I have a couple pieces of feedback on this draft. >> >> >> >> Let me start by saying that this is a wonderful spec—much needed by the >> working group, and much appreciated by the IE team in relation to the >> additional clarity it provides for interpretation of other specs. >> >> >> >> Before I launch into the specific feedback, let me explain the principle >> behind my thinking: make the DOM binding for JavaScript as extensible as >> possible. I’d like to ensure that within reason, there is sufficient >> language binding to make the DOM as extensible and customizable as possible >> for web developers. For example, web developers that want to customize DOM >> behavior via one of its APIs should only have to do so at most once (or >> several times if the API is a mixin). Most of the design decisions for IE8’s >> DOM prototypes follow this principle. >> >> >> >> 1- Mixing-in mixins (regarding 4.2.8 [PrototypeRoot], and sundry other >> places in the spec) >> >> >> >> My first comment here is that this is overly complicated. I don’t quite >> follow why the mixin prototype object is defined to exist one level up from >> the object instance. This pretty much ensures that it’s impossible to >> override the behavior of a mixin property (operation) on any scope larger >> than instance-level. For example, a developer would like to customize the >> behavior of addEventListener by replacing the native property with his/her >> own behavior, which ultimately invokes the native addEventListener API via >> apply. To do this and comprehensively cover every case where a webpage could >> use addEventListener, the web developer must override every instance in the >> DOM. This is unmanageable for any practical application. Rather, if the >> mixin properties were defined to exist higher-up in the prototype chain, >> then much more “coverage” can be obtained by one replacement. Since the >> mixin may appear on other interfaces, the scenario is not a single-point of >> replacement, but in all likelihood, a manageable number. >> >> >> >> I propose simplifying the mixin design substantially. I would like to see >> TargetInterface implements MixinInterface; be interpreted as merging each >> property/operation that is defined on the MixinInterface interface with the >> properties/operations on the TargetInterface. Treat mixins as literally >> “mixing in” to their associated interface. This likely implies that no >> interface object nor associated interface prototype object need be created >> in the ECMAScript binding. Where the MixinInterface interface is implemented >> by AnotherInterface, it’s properties/operations are merged to that interface >> as well (creating a copy of the property/operations on AnotherInterface). >> >> >> >> I believe that design is simpler for web developers to understand, and also >> increases the utility of extending the functionality of typical mixins (like >> EventTarget). Today, no browser implementation that I’m aware of handles >> this consistently, and thus the risk to change the spec is very low. >> >> >> >> 2- property inheritance (regarding 4.4.3 [interface prototype objects]) >> >> >> >> Again, from the extensibility point of view, it’s concerning to me that >> properties as defined on an interface are not actually represented as >> properties on the corresponding interface prototype object! Rather, the spec >> as it is currently written, flattens all properties to the object instance >> (which appears to coincide with Safari’s behavior for properties). With the >> current approach, properties (i.e., those defined with ‘attribute’ in the >> WebIDL) cannot be overridden (or replaced) on anything other than object >> instances themselves. A key scenario for IE8 was the ability to customize or >> replace the functionality of innerHTML globally for all elements. Thus, we >> provided a property for innerHTML on the most general element type we had >> (Element—yes I know it’s not the correct prototype hierarchy—we’re working >> on that J). Web developers can customize and extend that property in one >> place for far-reaching impact with little effort. Naturally, properties on >> prototypes are meaningless when invoked directly (they need an instance >> object ‘this’ reference), which is why IE8 and Firefox require the use of >> call/apply to be used when direct-invoking these. Opera does not appear to >> define properties at any level in their prototype chain, yet respects the >> web author’s intent to override them (again, at any point in the hierarchy). >> I favor IE, FF, and Opera’s extensibility over Safari’s simplicity on this >> point. >> >> >> >> I propose defining properties (not just operations) on interface prototype >> objects. This proposal allows properties to be overridden/extended as easily >> as operations currently are. It also results in nice symmetry between the >> properties and operations defined on a WebIDL interface and the resulting >> interface prototype object. Finally, it more closely approximates the >> behavior available in three of the four major browser venders. >> >> >> >> I’m eager to discuss these issues with the working group. >> >> >> >> Again, thanks for this great specification and your time as an invited >> expert. >> >> >> >> -Travis >> >> > >