Hi,

> why not just use this.superclass.method in the subclass?

If you mean:

    this.superclass.method(arg);

...there are a couple of problems there. The first, which could easily
be fixed, is that the above would lose the meaning of `this` within
the call to the parent method. To preserve it, you'd need to do this:

    this.superclass.method.call(this, arg);

But that won't work either, because there is no
`this.superclass.method` available (in fact, no `this.superclass`)
within the code of an instance's method: http://jsbin.com/uhitu5

The closest to `this.superclass.method` you can come is:

    this.constructor.superclass.prototype.method.call(this, arg);

...which works (http://jsbin.com/uhitu5/3) but I think you'd agree is
fairly long-winded. :-) (It also assumes nothing writes to the
`constructor` property, which is *probably* a valid assumption, and
yet...)

Or you could constantly reiterate the name of your class:

    ThisClass.superclass.prototype.method.call(this, arg);

...which also works (http://jsbin.com/uhitu5/2) but makes it a pain to
rename your class.

Or reiterate the name of your parent class:

    ParentClass.prototype.method.call(this, arg);

...which also works but makes it a pain to rename the parent class or
rebase your class.

Regardless, compared with Prototype's magic

    $super(arg);

...even the most terse of the above is verbose. :-)

Prototype's magical `$super` comes at a marked runtime cost -- not
that it usually matters -- and relies on unstandardized behavior
(function decompilation), which is probably more of a concern (as it's
known not to work on some mobile browsers). I did an alternate
mechanism that's more efficient and doesn't rely on function
decompilation, but at the cost of adding slightly to the complexity of
making the call:

    method.$super.call(this, arg);

or with a helper method (which is added overhead):

    this.callSuper(method, arg);

Details here, it may be useful reading for your thesis (or not):
http://blog.niftysnippets.org/2009/09/simple-efficient-supercalls-in.html

HTH,
--
T.J. Crowder
Independent Software Engineer
tj / crowder software / com
www / crowder software / com

On Mar 18, 1:13 pm, Luke <kickingje...@gmail.com> wrote:
> I'm sorry, what I meant was this.superclass In Prototype's class
> implementation you can see that if you provide a parent-class in prototype's
> Class.Create-Method, that class will be referenced as superclass in the
> class you are creating:
>
>   function create() {
>     var parent = null, properties = $A(arguments);
>     if (Object.isFunction(properties[0]))
>       parent = properties.shift();
>
>     // ...
>
>     klass.superclass = parent;
>
>     // ...
>
>     return klass;
>   }
>
> why not just use this.superclass.method in the subclass?

-- 
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com.
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en.

Reply via email to