JSFiddle - React, Tailwind, and code Playground
by smasala
JavaScript
var list = {};
var extend = function(param, _super){
var clazz;
for(p in param){
if(param.hasOwnProperty(p)){
param[p] = Object.getOwnPropertyDescriptor(param, p);
if(_super[p] && $.isFunction(_super[p])){
param[p].value = (function(func, parent){
return function(){
this.callParent = parent;
var r = func.apply(this, arguments);
delete this.callParent;
return r;
}
})(param[p].value, _super[p]);
}
}
}
var tmp = Object.create(_super);
return Object.create(Object.getPrototypeOf(tmp), param);
}
var define = function(name, param){
var clazz;
param._classname = name;
if(param.extend){
var _super = list[param.extend];
clazz = extend(param, _super);
//console.info("super", clazz, _super, Object.getPrototypeOf(tmp));
}else{
clazz = Object.create(param);
}
list[name] = clazz;
return clazz;
}
var create = function(name, param){
var clazz;
if(list[name]){
//clazz = Object.create(name, param);
clazz = extend(param, list[name])
}else{
clazz = define(name, param);
}
if(clazz.init){
clazz.init(123);
}
return clazz;
}
var a = define("MyApp.A", {
a: 1,
init: function(){
console.info("in a", this);
}
});
var b = define("MyApp.B", {
extend:"MyApp.A",
b: 2,
name: function(){
return "steve";
},
init:function(){
console.info("in b", this);
this.callParent(arguments);
}
});
var c = define("MyApp.C", {
extend:"MyApp.B",
c: 3,
init:function(){
console.info("in c", this);
this.callParent(arguments);
}
});
var x =...