Example:
    function SuperClass() {
    }

    function SubClass() {
    }
    SubClass.prototype = Object.create(SuperClass);
    SubClass.prototype.foo = function() {
        super.foo();
    };

Behind the scenes:
- SubClass.prototype.foo.[[Super]] = SuperClass.prototype;
- foo is desugared to:

    SubClass.prototype.foo = function thisFunction() { // named function 
expression
        thisFunction.[[Super]].foo.call(this);
    };

The “behind the scenes” work would be performed for object literals with a 
proto operator and for class literals.

On Oct 1, 2011, at 17:51 , John J Barton wrote:

> 
> 
> On Sat, Oct 1, 2011 at 8:22 AM, Brendan Eich <bren...@mozilla.com> wrote:
> > On Oct 1, 2011, at 4:23 PM, Lasse Reichstein wrote:
> >
> > On Sat, Oct 1, 2011 at 2:16 PM, Axel Rauschmayer <a...@rauschma.de> wrote:
> >>
> >> Then a super-call is always about letting "this" stay the same, but
> >> finding a "later" method: If your method lives in O1, you start your search
> >> for the super-property *after* O1 etc. In code this looks as follows:
> >>    here.__proto__.foo.call(this, …)
> >> where "here" means "the object that the current method lives in". The
> >> effect is then:
> >> - here.__proto__: start your search *after* the method’s object and look
> >> for "foo".
> >> - .call(this, …): but keep "this" the same.
> >
> > Am I right that super-calls only works for class methods, because they know
> > the, statically determinable, prototype chain of its instances, and
> > therefore it knows where to start the search. 
> > A normal method, e.g.,
> >  var o = {__proto__: { m: function(x) { alert(x); }};
> >  o.m = function(v) { super(v); };  // doesn't work
> >
> > You'd write super.m(v) there.
> > See http://wiki.ecmascript.org/doku.php?id=harmony:object_initialiser_super
> 
> The idea sounds interesting but unfortunately reference is written in a 
> language I don't understand.
> How about this case:
> 
>   var widget = {
>     hookup: function() {
>       // |this| is widget
>       // |super| is widget
>       window.addEventListener('load', function(event) {
>          // |this| is NOT widget
>          // |super| ??
>       }, false);
>     }
>   };
>   widget.hookup();
> 
> jjb
> 
> 
> > /be
> >
> >  o.m("hello");
> > won't be able to use "super", because it doesn't know where to start the
> > search - all it knows is the this-argument to the call and the function
> > itself, which doesn't necessarily mean anything.
> > /L
> > _______________________________________________
> > 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
> >
> >
> 

-- 
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

Reply via email to