On Apr 5, 2011, at 1:38 PM, David Bruant <[email protected]> wrote:
>> On Apr 2, 2011, at 5:11 PM, Brendan Eich wrote: >>> On Apr 2, 2011, at 4:19 PM, David Bruant wrote: >>> >>>> I have the feeling that none of these can help out with multiple >>>> inheritance. This is the problem I want to address. >>> Why? I mean, given the WebIDL and DOM changes. >>> >>> >>>> Is multiple inheritance a use case that TC39 intends to address in a >>>> generic manner? >>> No. >> Inheritance-based instanceof testing for the purpose of dynamic >> classification of objects is most appropriate in statically typed >> subclasing===subtyping languages. Multiple inheritance (at least for >> interfaces) is almost essential in such languages. That isn't is the case >> for dynamically typed subclassing!==subtyping languages. There is lots of >> experience with such languages that shows that dynamic classification via >> class or superclass inclusion testing is a poor practice. This is because >> it is possible (and often even necessary) to create behaviorally >> substitutable classes that don't participate in an inheritance >> relationship. By using such a test you are forcing downstream developers to >> fit into your implementation hierarchy and there may be strong reasons to do >> otherwise. > I am highly interested by all what is in this paragraph. Would you have > articles talking about that you could refer me to? Yes I am as well. Allen, were you thinking of adding a required attribute to the property MOP (this may be similar to traits)? The type signature would then be some encoding of all required properties. > >> >> instanceof testing is very familiar to programmers coming from a Java-like >> language background. But like a number of other statically-typed language >> practices, instanceof testing is not a good idiom to use in JavaScript. If >> an "EventTarget" must have specific behavioral characteristic, then define >> those characteristics such that any object that needs to be an "EventTarget" >> can implement them, regardless of what is on its [[Prototype]] chain. If it >> is important to be able to dynamically test if an object can serve as an >> "EventTarget" then define a property that provides that characterization and >> make it part of the specified behavior of an "EventTarget". Just don't >> require that EventTarget.prototype is somewhere on the [[Prototype]] chain. > So in a way, are you saying that the DOMCore/WebIDL decision is a bad one? > If so, how would you solve the Element+EventTarget problem? > > One interesting aspect I see in having all the things you inherit from > in the [[Prototype]] chain is that you may be able to communicate with > all other instances in a way. It may be a completely stupid idea, I > don't know. > >> Practically speaking, large parts of JavaScript community are just starting >> to use the language to build rich "class" libraries. Many of them don't >> have experience with dynamically typed OO languages so they naturally follow >> the practices they are familiar with. We really need to guide them towards >> using the best practices that have been proven effective for dynamic OO >> languages rather than facilitating continued use of static OO idioms that >> are a poor fit to JavaScript. > I don't think I am familiar enough with dynamically typed OO languages > to fully grasp how they work and best practices, but if other people > are, maybe they should weigh in for another decision for the > Element+EventTarget issue. It would be a great occasion to guide the > JavaScript community toward using good practices, wouldn't it? > > I also came from a C/Java background and learnt JS by myself. I'd be > happy to learn best practices of dynamic OO languages. As for the first > paragraph, if you have articles to share on the topic, I would be happy > to read them. > > David > >> Allen >> >> > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

