JSFiddle - React, Tailwind, and code Playground

JavaScript

var fields = ["id", "nam", "last_login"];

var User = (function () {
  function User (id, nam) {
    Object.defineProperty (this, '__',  // Define property for field values   
       { value: {} });
  
    this.id = id;
    this.nam = nam;
  };

  (function define_fields (fields){
    fields.forEach (function (field_name) {
      var values = {};
      Object.defineProperty (User.prototype, field_name, {
        get: function () { return this.__ [field_name]; },
        set: function (new_value) {
               // some business logic goes here 
               this.__[field_name] = new_value;
             }
      })
    })
  }) (fields);

  return User;
}) ();  

                
var user1 = new User(1, "Thomas");
var user2 = new User(2, "John");
                            
document.write ('user2: ' + user2.id + '  ' + user2.nam + '<br/>'); // 2, John
document.write ('user1: ' + user1.id + '  ' + user1.nam + '<br/>'); // 2, John

document.write ('user1.__: ' + JSON.stringify (user1.__)  + '<br/>');

user1.__ = 123;
 
document.write ('user1.__: ' + JSON.stringify (user1.__)  + ' Not changed !! <br/>');