I'm rewriting a JavaScript project, and I want to be able to use object oriented methodologies to organize the mess that the current code is. The main concern is that this JavaScript is supposed to run as a widget inside 3rd party websites and I can't have it conflicting with other JavaScript libraries that other websites may use.
So I'm looking for a way to write "class-like" inheritance in JavaScript that has the following requirements:
- No external libraries or things that would conflict with an external library (that precludes copy&paste from an external library).
- Minimalistic - I don't want the support code to be larger then a few lines of code and I don't want the developers to need a lot of boiler-plate every time they define a new class or methods.
- Should allow for dynamically extending parent objects so that child objects see the changes (prototype).
- Should allow for constructor chaining.
- Should allow for
super
type calls. - Should still feel JavaScript-ish.
Initially I tried to work with simple prototype chaining:
function Shape(x,y) {
this.x = x;
this.y = y;
this.draw = function() {
throw new Error("Arbitrary shapes cannot be drawn");
}
}
function Square(x,y,side) {
this.x = x;
this.y = y;
this.side = side;
this.draw = function() {
gotoXY(this.x,this.y); lineTo(this.x+this.side, this.y); ...
}
}
Square.prototype = new Shape();
And that solves requirements 1, 2 and 6 but id does not allow super calls (new functions override parent functions), constructor chaining and dynamically extending a parent does not provide the new methods to a child class.
Any suggestions will be welcome.