A class system for JavaScript featuring mixins, constructors, and superclass access.
Extracted from Orbit.js.
Either define your own base class with defineClass
or use the built-in
base class Klass
.
Any classes can be extended via the extend
method.
A base class that can be extended.
var CelestialObject = Klass.extend({
init: function(name) {
this._super();
this.name = name;
this.isCelestialObject = true;
},
greeting: function() {
return 'Hello from ' + this.name;
}
});
var Planet = CelestialObject.extend({
init: function(name) {
this._super.apply(this, arguments);
this.isPlanet = true;
},
greeting: function() {
return this._super() + '!';
},
});
var earth = new Planet('Earth');
console.log(earth instanceof Klass); // true
console.log(earth instanceof CelestialObject); // true
console.log(earth instanceof Planet); // true
console.log(earth.isCelestialObject); // true
console.log(earth.isPlanet); // true
console.log(earth.greeting()); // 'Hello from Earth!'
Define a new class with the properties and methods of one or more other classes.
The new class can be based on a SuperClass
, which will be inserted into its
prototype chain.
Furthermore, one or more mixins (object that contain properties and/or methods)
may be specified, which will be applied in order. When a method is replaced
with another method, it will be wrapped in a function that makes the previous
method accessible via this._super
.
defineClass(SuperClass [, mixins, ...])
SuperClass
- A base class to extend. Ifmixins
are to be included without aSuperClass
, passnull
for SuperClass.mixins
- One or more objects that contain properties and methods to apply to the new class.
Extend a class with the properties and methods of one or more other classes.
When a method is replaced with another method, it will be wrapped in a
function that makes the replaced method accessible via this._super
.
extendClass(destination [, source, ...])
destination
- The class to merge intosource
- One or more source classes
Copyright 2014-2015 Cerebris Corporation. MIT License (see LICENSE for details).