JSFiddle - React, Tailwind, and code Playground

by Peter Hozák

HTML

See console.

JavaScript

window.MODULE = {}

MODULE.constructor = (function(){
    "use strict";
    var _privateStaticVariable = 1;
    var publicStaticObject = {
        i: 0,
        f: function(){
            return _privateStaticVariable += this.i;
        }
    };
    
    return function(){ // constructor
        var _privateMemberVariable = 1;
        var _privateMemberMethod = function(value){
            return _privateMemberVariable += value;
        };
        
        this.publicMemberVariable;
        this.privilegedMemberMethod = function(value){
            this.publicMemberVariable = _privateMemberMethod(value);
        };
        
        this.static = publicStaticObject; // only works for objects
    };
}());
MODULE.constructor.prototype.publicMemberMethod = function(){
    return this.publicMemberVariable;  // no access to _privateMemberVariable
};

MODULE.closure = (function(){
    "use strict";
    var _privateStaticVariable = 1;
    var publicStaticObject = {
        i: 0,
        f: function(){
            return _privateStaticVariable += this.i;
        }
    };
    var publicMemberMethod = function(){
        return this.publicMemberVariable; // no access to _privateMemberVariable
    };
    
    return function(){ // closure
        var _privateMemberVariable = 1;
        var _privateMemberMethod = function(value){
            return _privateMemberVariable += value;
        };
        
        var obj = {};
        obj.publicMemberVariable;
        obj.privilegedMemberMethod = function(value){
            obj.publicMemberVariable = _privateMemberMethod(value);
        };
        
        obj.static = publicStaticObject; // only works for objects
        obj.publicMemberMethod = publicMemberMethod;
        return obj;
    };
}());

for (technique in MODULE) {
    if (technique === "constructor") {
        var a = new MODULE[technique]();
        var b = new MODULE[technique]();
    } else {
        var a = MODULE[technique]();
        var b =...