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);
});