src/class.js
/**
* Lettuce Class 0.0.1
* JavaScript Class built-in inheritance system
*(c) 2015, Fengda Huang - http://www.phodal.com
*
* Copyright (c) 2011, 2012 Jeanine Adkisson.
* MIT Licensed.
* Inspired by https://github.com/munro/self, https://github.com/jneen/pjs
*/
Lettuce.prototype.Class = (function (prototype, ownProperty) {
var lettuceClass = function Klass(_superclass, definition) {
function Class() {
var self = this instanceof Class ? this : new Basic();
self.init.apply(self, arguments);
return self;
}
function Basic() {
}
Class.Basic = Basic;
var _super = Basic[prototype] = _superclass[prototype];
var proto = Basic[prototype] = Class[prototype] = new Basic();
proto.constructor = Class;
Class.extend = function (def) {
return new Klass(Class, def);
};
var open = (Class.open = function (def) {
if (Lettuce.isFunction(def)) {
def = def.call(Class, proto, _super, Class, _superclass);
}
if (Lettuce.isObject(def)) {
for (var key in def) {
if (ownProperty.call(def, key)) {
proto[key] = def[key];
}
}
}
if (!('init' in proto)) {
proto.init = _superclass;
}
return Class;
});
return (open)(definition);
};
return lettuceClass;
})('prototype', ({}).hasOwnProperty);