can-construct-super
can.Construct.super is a plugin that makes it easier to call base functions from inside inheriting functions.
construct._super([...args])
Calls the base constructor function's method.
Parameters
- args
{Any}:parameters to pass to the base function
With this plugin, functions that are inheriting from base functions
are provided with a specialized this._super reference to the base
function from which they inherit.
This is especially useful for calling base classes' init and setup , but it can be used in any inheriting function.
The Person and Programmer examples from init demonstrate _super's use.
Here's how those classes look without can.Construct.super:
var Person = Construct.extend({
init: function(first, last) {
this.first = first;
this.last = last;
}
});
var Programmer = Person.extend({
init: function(first, last, language) {
// call base's init
Person.prototype.init.apply(this, arguments);
// other initialization code
this.language = language;
},
bio: function() {
return "Hi! I'm " + this.first + " " + this.last +
" and I write " + this.language + ".";
}
});
And here's how Programmer works using _super:
var Programmer = Person.extend({
init: function(first, last, language) {
// call base's init
this._super(first, last);
// other initialization code
this.language = language;
},
bio: function() {
return "Hi! I'm " + this.first + " " + this.last +
" and I write " + this.language + ".";
}
});
If you want to pass an array of arguments (or an arguments object) to _super, use apply:
var Programmer = Person.extend({
init: function(first, last, language) {
// call base's init
this._super.apply(this, arguments);
// other initialization code
this.language = language;
},
bio: function() {
return "Hi! I'm " + this.first + " " + this.last +
" and I write " + this.language + ".";
}
});
_super on constructors
can.Construct.super also adds super to the constructor, so you
can use it in static functions.
Here is a base class that has a method that squares numbers and an inherited class that has a method that cubes numbers:
var Squarer = can.Construct.extend({
raise: function(n) {
return n*n;
}
}, {});
var Cuber = Squarer.extend({
raise: function(n) {
return n * this._super(n);
}
}, {});