Hi,  

Sorry have not had a chance to reply on this thread earlier. I do really like 
the direction that Jeremy pushes to, but still I don't understand why do we 
need to introduce new syntax to the language. I think `class` expression is 
completely unnecessary, why not a function ? I forked Jeremy's proposal and 
modified it so that it preserves it's simplicity without introducing any new 
syntax to the language:

https://gist.github.com/1355701

In addition I changed few things that was raising additional questions:

-  `constructor` property as initializer (what if constructor is shared, frozen 
etc).

I also intentionally omitted `super` as it's separate topic.  
Regards
--
Irakli Gozalishvili
Web: http://www.jeditoolkit.com/
Address: 29 Rue Saint-Georges, 75009 Paris, France (http://goo.gl/maps/3CHu)


On Thursday, 2011-11-03 at 11:33 , Brendan Eich wrote:

> On Nov 3, 2011, at 6:53 AM, Matthew Tretter wrote:
>  
> > Sorry, I'll try to be more clear.
> >  
> > What's "super-intuitive" isn't *that* you use the form "class name expr", 
> > it's how you interact with that form once you know what it does. The reason 
> > is self-evident—people know how to work with object literals and functions.
>  
> Then we are not talking about the same thing.
>  
> Class syntax of the form class C {...} where the {...} is an extension of 
> ES3-5 ObjectLiteral syntax is fine, we're aligned on that (for the moment).
>  
> The particular form from Jeremy's gist:
>  
> // Note that the right-hand side of a class definition is just an expression,
> // an object literal is not required. You can be fully dynamic when creating a
> // class:
>  
> class Student objectContainingStudentProperties
> line 59 on at https://gist.github.com/1329619
>  
> is what is at issue.
>  
>  
> > This is not true of the Leather form which, like I said, would probably 
> > inspire a lot of "run(a){…}" attempts at function definitions in non-class 
> > contexts.
>  
> Different topic yet again, but ok: method definition syntax was already 
> proposed a while ago by Allen, and promoted to Harmony for ES.next. It may 
> cause some Dart-like 'function'-lacking misplaced method definition attempts, 
> indeed. We should see how big a problem this is in practice. I doubt it'll be 
> more than a speed-bump for some, but if it is, we can adapt.
>  
>  
> > Not that that alone is enough to disqualify it, but it's something that 
> > should be taken into consideration.
>  
> Agreed.
>  
>  
> > Off the top of my head, one use-case would be Python-like method decorators:
> >  
> > class Runner {
> > run: require_auth(function(a) {
> > })
> > }
> >  
> > Another would be the dynamic definition of methods:
> >  
> > class Runner {
> > run: (function() {
> > return someFeatureIsSupported ? feature : polyfill;
> > })()
> > }
> >  
>  
>  
> These are still legal, with class body built on extended object literals. Why 
> did you think these would be verboten?
>  
> It's one thing to say "these should work". It's another to insist that the 
> long-hand should be the only way.
>  
> /be
> _______________________________________________
> es-discuss mailing list
> [email protected] (mailto:[email protected])
> https://mail.mozilla.org/listinfo/es-discuss
>  
>  


_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to