Skip to content

Instantly share code, notes, and snippets.

@j1anb1n
Created October 19, 2015 03:14
Show Gist options
  • Save j1anb1n/0faa954be6ff34539d9f to your computer and use it in GitHub Desktop.
Save j1anb1n/0faa954be6ff34539d9f to your computer and use it in GitHub Desktop.
/* Simple JavaScript Inheritance
* By John Resig http://ejohn.org/
* MIT Licensed.
*/
// Inspired by base2 and Prototype
/* jshint ignore: start */
var initializing = false;
function Class () {
}
// Create a new Class that inherits from this class
Class.extend = function(prop) {
var _super = this.prototype;
// Instantiate a base class (but only create the instance,
// don't run the init constructor)
initializing = true;
var prototype = new this();
initializing = false;
// Copy the properties over onto the new prototype
for (var name in prop) {
// Check if we're overwriting an existing function
if (typeof prop[name] == "function" && typeof _super[name] == "function") {
prototype[name] = (function (fn) {
return function () {
var tmp = this._super, ret;
this._super = _super;
ret = fn.apply(this, arguments);
this._super = tmp;
return ret;
}
})(prop[name]);
} else {
prototype[name] = prop[name];
}
}
prototype._super = this.prototype;
// The dummy class constructor
function Class() {
// All construction is actually done in the init method
if ( !initializing && this.init ) {
this.init.apply(this, arguments);
}
}
// Populate our constructed prototype object
Class.prototype = prototype;
// Enforce the constructor to be what we expect
Class.prototype.constructor = Class;
// And make this class extendable
Class.extend = arguments.callee;
return Class;
};
module.exports = Class;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment