JSFiddle - React, Tailwind, and code Playground
by secretgspot
HTML
<script src="http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js"></script>
<script type="text/javascript">
firebug.env.height = 200;
firebug.env.debug= true;
firebug.env.detectFirebug = true;
</script>
<script type="text/javascript">
(function( $ ){
$.makeclass = function( orgObj ){
if( !$.isEmptyObject(orgObj.Static) ){
$.extend(orgObj,orgObj.Static);
}
var obj = $.extend({},{},orgObj);
var arguments = Array.prototype.slice.call( arguments );
arguments.shift();
if( !obj.Public ){ obj.Public ={}; }
var privateObj = ($.isEmptyObject( obj.Private ))?{}:$.extend({},{},obj.Private);
if ( obj.Extends ) {
var extend = $.extend({},{}, obj.Extends);
if( !$.isEmptyObject(extend.Static) ){
$.extend(orgObj,extend.Static);
}
var parentInitialize = extend.Initialize;
privateObj =$.extend({},extend.Private,privateObj);
obj.Public.parent ={
Initialize: function(){
var args = Array.prototype.slice.call( arguments );
args.unshift( privateObj );
parentInitialize.apply( this , args);
}
};
for(var field in extend.Public ){
if($.isFunction(extend.Public[field])){
eval("obj.Public.parent['"+field+"']"+"= function "+field+"(){"+
"var args = Array.prototype.slice.call( arguments );"+
"args.unshift( privateObj );"+
"return extend.Public[arguments.callee.name].apply(this,args);"+
"}");
}else{
obj.Public.parent[field ] = extend.Public[field];
}
}
var parentProto = $.extend({}, extend.Public); // copying
...
JavaScript
jQuery(function($){
var Employee = {
Initialize: function( private, name, salary ){
private.name = name;
private.salary = salary;
},
Private:{
name: null,
salary: null
},
Public:{
getSalary: function(private){
return private.salary;
},
getName: function(private){
return private.name;
},
raiseSalary: function(private, byPercent){
var raise = private.salary * byPercent / 100;
private.salary += raise;
}
}
};
var Manager = {
Extends: Employee,
Initialize: function( private, name, salary){
this.parent.Initialize( name, salary );
private.bonus = 0;
},
Private:{
bonus: null
},
Public:{
getSalary: function( private ){
var baseSalary = this.parent.getSalary();
return baseSalary + private.bonus;
},
setBonus: function( private, bonus ){
private.bonus = bonus;
}
}
};
var employees = [];
employees[0] = $.makeclass(Employee ,"Bob miller", 50000 );
employees[1] = $.makeclass(Employee ,"Tom johnson", 30000 );
employees[2] = $.makeclass(Employee ,"Marry Cracker", 40000 );
employees[4] = $.makeclass(Manager ,"Mike Austin", 80000 );
employees[4].setBonus(5000);
for( i in employees){
console.log("name: " + employees[i].getName() + " , salary = " + employees[i].getSalary() );
}
});