Hoc: Neo-Parasitic Inheritance
A minimalistic pattern for creating simple classical inheritance features in Javascript without requiring an external library.
by klenwell
HTML
<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.12.0.css">
<script src="http://code.jquery.com/qunit/qunit-1.12.0.js"></script>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
JavaScript
/*
* Object Classes
*/
function HocObject() {
/*
* Classical Class Infrastructure
* self: the instantiated object
*/
var self = {};
self.hoc = this;
self.is_a = function(obj_class) {
return self.hoc instanceof obj_class;
};
self.init = function() {
console.debug('initializing HocObject');
};
self.init();
return self;
}
function Parasite(host) {
/*
* HocObject Inheritance
*/
var self = new HocObject();
self.hoc = this;
self.host = host;
// Method override pattern
var super_init = self.init;
self.init = function() {
console.debug('initializing Parasite (overriding HocObject)');
};
self.init();
return self;
}
/*
* Tests
*/
test("HocObject", function () {
var hoc_obj = new HocObject();
ok(hoc_obj, "failed to instantiate");
ok(hoc_obj.is_a(HocObject));
});
test("Parasite", function () {
var host = 'host';
var parasite = new Parasite(host);
ok(parasite.is_a(Parasite));
ok(! parasite.is_a(HocObject));
equal(parasite.host, host);
});