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