On Monday, 2011-06-13 at 24:03 , Brendan Eich wrote:
> 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? > > Yeap, sorry! It's there now. > > > 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 > Could be, I have not spend time thinking on super as I considered as separate issue. I'll take a look at Allen's work thanks for the link. Another idea I had was that super can be similar to private. Here is some example: function super(self) { var proto = Object.getPrototypeOf(Object.getProtypeOf(self)); Proxy.create({ ... get: function (receiver, name) { // Shorter to constructor would be nice: super(this).new(options) if (name === 'new') name = 'constructor' // make sure to apply for getter / setters / and methods only. // super(this).method(a, b) return proto[name].bind(self); } ... }, proto); } super(this).new(options); super(this).constructor(a, b); super(this).method(a, b); Obviously I don't suggest to use proxy, I just used to illustrate idea. Also please not that constructor will be enough as users will be able to implement getter `new` returning `this.constructor` on a base class for shorter syntax. > /be > > > > > /be > > > > > > > > > > > Thanks > > > > -- > > > > Irakli Gozalishvili > > > > Web: http://www.jeditoolkit.com/ > > > > Address: 29 Rue Saint-Georges, 75009 Paris, France > > > > (http://goo.gl/maps/3CHu) > > > > > > > > > > > > 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 > > > > > [email protected] (mailto:[email protected]) > > > > > https://mail.mozilla.org/listinfo/es-discuss > > > > > > > > _______________________________________________ > > > > 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

