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@mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>> 
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss@mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>> 
> 

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to