JSFiddle - React, Tailwind, and code Playground

by amuzalevskyi

JavaScript

// util
function createFieldDeclaration(fields){
    var decl = {};
    for(var i = 0; i<fields.length; i++) {
        (function(propName) {
            decl[propName] = {
                get: function () {
                    return this.props[propName];
                },
                set: function (value) {
                    this.props[propName] = value;
                }
            }
        })(fields[i]);
    }
    return decl;
}

// class definition
function User(id, name){
    this.props = {};
    this.id = id;
    this.name = name;
}; 
User.prototype = Object.create(Object, createFieldDeclaration(['id','name']));

// tests
var Alex = new User(0, 'Alex'),
    Andrey = new User(1, 'Andrey');

document.write(Alex.name + '<br/>'); // Alex
document.write(Andrey.name + '<br/>'); // Andrey

Alex.name = "Alexander";
document.write(Alex.name + '<br/>'); // Alexander
document.write(Andrey.name + '<br/>'); //Andrey