I don’t know if this has been discussed, but I find the |super| work-around provided by YUI and CoffeeScript (in the generated code) not that bad:
ThisClass.__super__.foo.call(this, arg1, arg2); With ThisClass.__super__ pointing to SuperClass.prototype. As a completely static solution, one could maybe expand a super-call super.bar(x, y); to __CurrentObject__.[[Prototype]].bar.call(this, x, y); On the other hand, I don’t know if a reference to __CurrentObject__ is ever available for some kind of static expansion. On Jun 25, 2011, at 19:51 , Brendan Eich wrote: > On Jun 25, 2011, at 10:31 AM, Allen Wirfs-Brock wrote: > >> On Jun 25, 2011, at 6:10 PM, Brendan Eich wrote: >> >>> On Jun 24, 2011, at 1:00 PM, Allen Wirfs-Brock wrote: >>> >>>> If there was a mechanism for lexically addressing this, I would expect >>>> |super| to track |this| in parallel. From a value perspective, |super| is >>>> just a synonym for |this|. >>> >>> This is an important point, although what is a non-value perspective in JS? >> >> Perhaps I should have said binding perspective. > > "binding" is a much abused word, but in JS communities I hope we can keep it > restricted to names in environments, lexical vs. dynamic vs. argument value > to formal parameter binding -- at most! > > But I get what you mean. 'super' by itself is a reference to the same object > 'this' denotes, or undefined where 'this' is undefined. 'super' and 'this' > are aliases. But 'super'-based property references start from a different > prototype chain head. > > >>> There are no explicit types. The answer must be an implicit type, the >>> superclass view provided by the [[Prototype]] of the class prototype or >>> ad-hoc containing object in which the method using 'super' was written. >> >> What you are concerned about here may be too subtle for some readers. Any >> caching of a |super| based property lookup needs to be keyed by the internal >> type of the object where the property lookup actually starts rather than the >> internal type of |this|. > > Yes, I'm concerned about subtlety if 'super' in functions. The tension is > between confining 'super' to be valid only in class methods, vs. making it > work in any function. But the class-methods-only approach leads to > invoke-only methods, to avoid the reparenting or borrowing problem that > Object.defineMethod addresses. > > I'm less concerned about 'super' for all functions, plus Object.defineMethod. > This is "JavaScript-y" and causes me less concern than a class-based 'super' > confinement attempt. But the whole package deal still causes concern, because > of the "you forgot to use Object.defineMethod" problem. We're adding another > runtime error case, a hazard requiring test coverage. > > Not sure what can be done about this. > > /be -- Dr. Axel Rauschmayer a...@rauschma.de twitter.com/rauschma home: rauschma.de blog: 2ality.com _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss