Is class syntax really necessary ?

Brendan Eich brendan at mozilla.com
Sun Jun 12 15:03:30 PDT 2011


On Jun 12, 2011, at 2:52 PM, Irakli Gozalishvili wrote:
> Here is gist I wrote before:
> 
> https://gist.github.com/986487#file_implementation.js

What Function.create are you using there?

Is there a missing return statement in function extend?


>> and say how it solves the super-construct and super-method-call problems?
> 
> I don't have any (in js implementable solution) for those problems, also I think sugar for `super` can be a separate thing. Gist contains example with  super that behave exactly the same as in harmony proposal for classes. 

    super.update();
    // Desugars to:
    // Object.getPrototypeOf(Object.getPrototypeOf(this)).update.call(this);

That comment is wrong, or worse: it implies the wrong spec. This function code does not want to depend on |this|, which could be rebound. You want to depend on the [[Prototype]] of the enclosing object, or if contained in class C syntax at the right level (not nested in arbitrary function expressions or inner function definitions), C.prototype.[[Prototype]].

Allen worked through this idea already:

http://wiki.ecmascript.org/doku.php?id=harmony:object_initialiser_super

/be


>  
>> /be
>> 
>>> 
>>> Thanks
>>> --
>>> Irakli Gozalishvili
>>> Web: http://www.jeditoolkit.com/
>>> Address: 29 Rue Saint-Georges, 75009 Paris, France
>>> 
>>> On Tuesday, 2011-05-24 at 24:48 , Brendan Eich wrote:
>>> 
>>>> On May 23, 2011, at 11:25 AM, Bob Nystrom wrote:
>>>> 
>>>>> One thing I'd like the proposal to support, which it doesn't currently, is initializers on instance property declarations. Then you could do:
>>>>> 
>>>>>> class C {
>>>>>>   public _list = [];
>>>>>> }
>>>>> 
>>>>> With that, you'll correctly get a new _list on each instance of C when it's created.
>>>> 
>>>> But (we've argued, I forget where so repeating it here), this looks like [] is evaluated once when the class declaration is evaluated. That is not what you intend.
>>>> 
>>>> Then at some point (in the last thread on this) I remembered parameter default values, but they cover only missing parameters to the constructor. This _list member could be private. But it has to be initialized in a body that executes once per instantiation, which is not the class body -- it's the constructor body.
>>>> 
>>>> /be
>>>> 
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss at mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>> 
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110612/190764e7/attachment.html>


More information about the es-discuss mailing list