Simple Javascript Inheritance

by Deepak Kumar

JavaScript

(function () {
    var initializing = false,
        fnTest = /xyz/.test(function () {
            xyz;
        }) ? /\b_super\b/ : /.*/;
    this.Class = function () {};
    Class.extend = function (prop) {
        var _super = this.prototype;
        initializing = true;
        var prototype = new this();
        initializing = false;
        for (var name in prop) {
            prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function (name, fn) {
                return function () {
                    var tmp = this._super;
                    this._super = _super[name];
                    var ret = fn.apply(this, arguments);
                    this._super = tmp;
                    return ret;
                };
            })(name, prop[name]) : prop[name];
        }

        function Class() {
            if (!initializing && this.init) this.init.apply(this, arguments);
        }
        Class.prototype = prototype;
        Class.constructor = Class;
        Class.extend = arguments.callee;
        return Class;
    };
})();


var BI = Class.extend({
    init: function () {
        console.log('my BI class');
    },

    myA: function () {
        console.log('this is myA()');
    }
});
var BI_CLASS = new BI();

var BI2 = BI.extend({
    init: function () {
        console.log('my BI2 Class');
        BI_CLASS.myA();
    },

    not: function () {
        console.log('I am in not()');
    }
});
jQuery(document).ready(function ($) {
    var BI_CLASS2 = new BI2();
});