You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.6 KiB
75 lines
2.6 KiB
(function () {
|
|
"use strict";
|
|
|
|
var Toolbox = window.Toolbox = {};
|
|
|
|
// `ctor` and `inherits` are from Backbone (with some modifications):
|
|
// http://documentcloud.github.com/backbone/
|
|
|
|
// Shared empty constructor function to aid in prototype-chain creation.
|
|
var ctor = function () {};
|
|
|
|
// Helper function to correctly set up the prototype chain, for subclasses.
|
|
// Similar to `goog.inherits`, but uses a hash of prototype properties and
|
|
// class properties to be extended.
|
|
var inherits = function (parent, protoProps, staticProps) {
|
|
var child;
|
|
|
|
// The constructor function for the new subclass is either defined by you
|
|
// (the "constructor" property in your `extend` definition), or defaulted
|
|
// by us to simply call `super()`.
|
|
if (protoProps && protoProps.hasOwnProperty('constructor')) {
|
|
child = protoProps.constructor;
|
|
} else {
|
|
child = function () { return parent.apply(this, arguments); };
|
|
}
|
|
|
|
// Inherit class (static) properties from parent.
|
|
_.extend(child, parent);
|
|
|
|
// Set the prototype chain to inherit from `parent`, without calling
|
|
// `parent`'s constructor function.
|
|
ctor.prototype = parent.prototype;
|
|
child.prototype = new ctor();
|
|
|
|
// Add prototype properties (instance properties) to the subclass,
|
|
// if supplied.
|
|
if (protoProps) _.extend(child.prototype, protoProps);
|
|
|
|
// Add static properties to the constructor function, if supplied.
|
|
if (staticProps) _.extend(child, staticProps);
|
|
|
|
// Correctly set child's `prototype.constructor`.
|
|
child.prototype.constructor = child;
|
|
|
|
// Set a convenience property in case the parent's prototype is needed later.
|
|
child.__super__ = parent.prototype;
|
|
|
|
// child.extend = extendThis;
|
|
|
|
return child;
|
|
};
|
|
|
|
// Self-propagating extend function.
|
|
// Create a new class that inherits from the class found in the `this` context object.
|
|
// This function is meant to be called in the context of a constructor function.
|
|
function extendThis(protoProps, staticProps) {
|
|
var child = inherits(this, protoProps, staticProps);
|
|
child.extend = extendThis;
|
|
return child;
|
|
}
|
|
|
|
// A primitive base class for creating subclasses.
|
|
// All subclasses will have the `extend` function.
|
|
// Example:
|
|
// var MyClass = Toolbox.Base.extend({
|
|
// someProp: 'My property value',
|
|
// someMethod: function () { ... }
|
|
// });
|
|
// var instance = new MyClass();
|
|
Toolbox.Base = function () {}
|
|
Toolbox.Base.extend = extendThis;
|
|
|
|
})();
|
|
|