I am warming up to class literals: they should help IDEs and will make future extensions easier (mixins etc.). Note that they are not mutually exclusive with prototypes as classes.
On Jul 11, 2011, at 22:18 , Bob Nystrom wrote: > I agree with Brendan's replies, but just to add some more color: > > On Sat, Jul 2, 2011 at 11:46 AM, Angus Croll <[email protected]> wrote: > The concept itself is very simple - a dynamic archetype to be shared by all > my instances: my prototype changes, my instances know about it. I would not > want to hide such a smart, simple concept behind the more complex and (in > this scenario) less meaningful concept of class. > > To me, that's pretty close to a "class": a thing that describes the > properties and behavior of a set of objects. Sure, you can roll in all of the > other shenanigans that Java et. al. include (final, static, nested classes, > etc.) but the real kernel is "we have a bunch of objects that are similar and > we want to define that similarity in one place." > > JS does so through MyType.prototype and class-based languages do it in a > class definition. The class syntax proposal just gives you a nicer notation > for the former. > > a) The syntax may be fixable but the logic isn't. Inheritance hierarchies are > gnarly. > - Nine times out of ten it's a re-use technique masquerading as a > classification of types. > > Agreed, completely. Deep inheritance hierachies are almost always a guarantee > of misery. But the 1 in 10 case where OOP inheritance has been a big success > is... UI frameworks. Considering how important that use case is to > JavaScript, supporting it gracefully seems reasonable to me. > > - Mixins allow objects to borrow from an unlimited number of other objects > regardless of lineage, while still allowing for organization of functions by > type. > > I'm a huge fan of mixins/traits/multiple-inheritance > (http://journal.stuffwithstuff.com/2011/02/21/multiple-inheritance-in-javascript/). > I very often find single inheritance frustrating. > > I don't like "classic" mixins because they make it too easy for a later mixin > to stomp over the methods of an earlier one. Traits solve that nicely, and > I'd like to see them in JS at some point. If we had them, I'd use them > heavily. > > At the same time, I probably bear the most responsibility for talking Mark > into taking them out of the class proposal. My reasoning was this: > > 1. Getting *any* declarative "kind of thing" syntax into JS is fantastically > hard, as you can see. > 2. We'll need something like that to hang traits/mixins off of. > 3. Traits are complex enough that they may sink the whole proposal. > > So my take was: start with a simple class syntax that lets you declaratively > express how JS is being written *right now* with single inheritance. If we > can get that into ES6, we'll be in a much better position to try to work > traits into ES7. (And even if traits never get in, I think we'll have made a > large fraction of the world's JS simpler and easier to read.) > > It's also worth remembering that this class proposal doesn't take away any of > the flexibility JS has. Your mixin system and my weird little MI one will > still work in an ES6 that has a class syntax. It's just that if you're > following the common path of defining constructor functions and adding > functions to its .prototype, then you'll have a simpler syntax for doing so. > > We're paving a footpath here, not building a fence around it. You're always > free to wander off it into the forest. > > Earlier in this thread, Brendan said "I claim we can do little to control the > outcome in terms of adoption...the classical OOP patterning in many devs' > brains, count more than our exhortations." That's sad because I think many > ex-classical programmers (myself included) grew tired of implementation > inheritance as the dominant paradigm and gravitated to JavaScript (and also > functional languages) as a refuge from the stodgy tyranny of bloated > hierarchies. > > I too grew tired of implementation inheritance, but not classes. I still > really like class-based languages, I just like ones like Python and C# (and > JS if you're loose about "class") that augment that with first-class > functions and other ways to compose behavior. > > JavaScript is on the upward path, Java on the down. We're fostering a > generation of converts from classical OOP to something more elegant, agile > and useful. It would be a shame to throw in the towel now. > > I think you're making a false dichotomy here. "Classes" doesn't always mean > Java's "sign everything in triplicate, here comes the Carpal tunnel" level of > boilerplate. Nor does it always mean C++'s "better write a style guide before > you coworker uses some hideous dark corner of the language" level of > complexity/flexibility ("comflexibility"?). Consider Smalltalk, CLOS, Python, > Ruby, or C#. You can have classes in a beautiful language. > > - bob -- Dr. Axel Rauschmayer [email protected] twitter.com/rauschma home: rauschma.de blog: 2ality.com
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

