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() );
    }
    
});