Super-references

Axel Rauschmayer axel at rauschma.de
Fri Mar 8 20:13:38 PST 2013


> let me reformulate .. do you realize Object,mixing can be done runtime, so not possible to predefine the super, and that you method fails if you have more than a super in such form ? If not, can you write B extends A and C extends B and use super in both C and B methods going up to A or do what my example was doing ?

You don’t predefine super, you only have to keep [[HomeObject]] updated. That’s what Object.mixin does. Then [[HomeObject]] (or rather, its prototype) is the starting point for looking for super-properties.


> Even easier, something like this:
> 
> function A() {
>   this.test('Hello!');
> }
> A.prototype.test = function (what) {
>   alert(what);
> };
> 
> function B() {
>   this.super();
> }
> B.prototype = poo.inherit(A.prototype);
> B.prototype.constructor = B;
> B.prototype.test = function (what) {
>   this.super(what);
> };
> 
> poo.superable(B.prototype);
> 
> new B;
> // will alert Hello! dong these steps:
> //  1. invokes B.prototype.constructor which
> //  2. invokes A.prototype.constructor which
> //  3. invokes B.prototype.test which
> //  4. invokes A.prototype.test
> 

Yes, that will work. But you can’t find `super` via `this` (which changes dynamically), you must start your search in the prototype of the object in which a method is stored.

-- 
Dr. Axel Rauschmayer
axel at rauschma.de

home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20130309/b44b6ce5/attachment-0001.html>


More information about the es-discuss mailing list