Javascript Inventor - library design
by gschutz
HTML
<script src="https://rawgit.com/lodash/lodash/3.10.1/lodash.js"></script>
JavaScript
;(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define(factory);
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
root.Classy = factory();
}
}(this, function() {
function ClassyWrapper(name) {
this.name = name;
}
var Classy = this.Classy = function (name) {
Classy[name] = Classy.invent;
Classy[_.capitalize(name)] = Classy[name]({
create: name,
inherit: Classy.Resource
});
return new Classy[_.capitalize(name)](name);
}
Classy.create = function(name) {
return new ClassyWrapper(name);
}
Classy.invent = function(config) {
/* create element initializer */
//var ctx = typeof config.create == 'function' ? : config.create;
var init = typeof config.create == 'function' ?
config.create :
function() {
this.constructor.call(this, Classy.create(config.create));
};
/* inherit prototype */
if (config.inherit)
init.prototype = new config.inherit;
return init;
}
Classy.Wrapper = Classy.invent({
create: function(wrapper) {
_.assign(this, wrapper);
}
});
Classy.Resource = Classy.invent({
create: "Resource",
inherit: Classy.Wrapper
});
Classy.People = Classy.invent({
create: "Resource",
inherit: Classy.Resource
});
Classy.User = Classy.invent({
create: "Resource",
inherit: Classy.People
});
return Classy;
}));
var world = Classy("world");
console.log(world);
console.log([world]);