The starting point for the class initialiser proposal are the Object 
Initialiser Extensions.  I wanted to add the option to specify the prototype 
for  ObjectLiteral and ArrayLiteral but because they aren't prefixed by a 
keyword, the extends like syntax doesn't work for them.  The <proto: foo> 
syntax does.  If we accept that, then it seems to make sense to use a similar 
convention for Class Initalisers.  Put another way, I generally prioritize 
internal consistency ahead of similarity with other languages.

There are both advantages and disadvantages to copying syntax from another 
language.  One of the disadvantages is familiar syntax creates an expectation 
for similar semantics.  JavaScript isn't Java and the objects defined by this 
proposal don't have the semantics of Java objects.  It may be a good thing if 
unfamiliar syntax causes a Java programmer to slow down a bit and think about 
what they really are defining.

At a more meta level, I don't think about this proposal as adding classes to 
ECMAScript. I see it as adding syntax that more directly supports a common 
object usage patterns.  The extension doesn't add or change ECMAScript's 
fundamentally instance-based object model and it doesn't preclude other 
patterns of object-based inheritance or composition.  That was why in earlier 
iterations of this proposal I used the keyword "constructor" instead of "class".

BTW, the above is mostly a mild rant in reaction to your phrase "the future of 
classes on Harmony".  I really hope that the meme doesn't get started that 
we're trying to remake JavaScript as a Java-style class-based language. I 
suspect you didn't mean that by the phrase, but I'm sensitive about how the 
things we talk about here and on the wiki are sometimes misinterpreted by 
members of the wider JavaScript community.   

Allen 







On Mar 15, 2011, at 12:46 PM, Juan Ignacio Dopazo wrote:

> One more question about the future of classes on Harmony.
> 
> Although the <meta: property> syntax is very clear, I'm wondering if it isn't 
> better to be less innovative and stick to what ES4/Java/etc have been doing 
> for a long time. Wouldn't something like this ease the learning curve of the 
> new features?
> 
> frozen class C extends S {
> }
> 
> In this case frozen would apply to both the constructor, the prototype and 
> the instances created from the class. My guess is that most developers will 
> usually chose to apply a generic property instead of a more granular approach 
> (sealing only the prototype, etc). Of course, this could coexist with <meta: 
> properties> for when it is necessary to be more specific.
> 
> class C extends S {
>   <sealed: instance>
> }
> 
> Juan
> _______________________________________________
> 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

Reply via email to