JSFiddle - React, Tailwind, and code Playground

by rcuzcano

JavaScript

var userSettings = {
    subscribers : [],
    listeners : {},
    username : username,
    expired : expired,
    

    get: function (field) {
        for (var i = 0; i < this.listeners[field].length; i++) {
            return this.listeners[field][i](this);
        }
    },

    set: function (field, value) {
        for (var i = 0; i < this.listeners[field].length; i++) {
            this.listeners[field][i](this) = value;
        }
    },

    Object.defineProperty(userSettings, "expired", {
        get: function () {
            return this.getExpired()
        },
        set: function (expired) {
            this.setExpired(expired)
        }
    });

    Object.defineProperty(userSettings, "widgetsSettings", {
        get: function(){
            return this.getWidgetsSettings()
        },
        set: function (widgetsSettings) {
            this.setWidgetsSettings(widgetsSettings);
        }
    });

    
    add = function (username) {
        this.username = username;
        this.dispatch("added");
    };

    on = function (eventName, listener) {
        if (!this.listeners[eventName]) {
            this.listeners[eventName] = [];
        }
            
        this.listeners[eventName].push(listener);
    };

    dispatch = function (eventName) {
        if (this.listeners[eventName]) {
            for (var i = 0; i < this.listeners[eventName].length; i++) {
                this.listeners[eventName][i](this);
            }
        }
    };
    
}

var settings = new userSettings('name1', false);
console.log(settings);

settings.username = 'name666';
settings.expired = true;
settings.widgetsSettings = [];

console.log(settings);

settings.on("added", function () {
    console.log(settings.username);
});

settings.add('name1');