JSFiddle - React, Tailwind, and code Playground
JavaScript
/**
*
* @param {object} obj an object to set its values
* @param {object} data an object containing the values
* @param {string[]} names an array containing allowed names
*/
function setData(obj, data, names) {
if (data)
for (var i = 0; i < names.length; i++) {
if (data.hasOwnProperty(names[i]))
obj[names[i]] = data[names[i]];
}
}
function Foo(data) {
var self = {
name: ''
};
setData(self, data, ['name']);
Object.defineProperties(this, {
Name: {
enumerable: true,
get: function () {
return self.name;
}
}
});
}
var Bar = (function () {
var self = {
name: ''
};
function Bar(data) {
setData(self, data, ['name']);
}
Object.defineProperties(Bar.prototype, {
Name: {
enumerable: true,
get: function () {
return self.name;
}
}
});
return Bar;
})();
var Qux = (function () {
function Qux(data) {
this.self = {
name: ''
};
setData(this.self, data, ['name']);
}
Object.defineProperties(Qux.prototype, {
Name: {
enumerable: true,
get: function () {
return this.self.name;
}
}
});
return Qux;
})();
var foo1 = new Foo({name: 'Foo1'});
var foo2 = new Foo({name: 'Foo2'});
console.log(foo1);
console.log(foo2);
var bar1 = new Bar({name: 'Bar1'});
var bar2 = new Bar({name: 'Bar2'});
console.log(bar1);
console.log(bar2);
var qux1 = new Qux({name: 'Qux1'});
var qux2 = new Qux({name: 'Qux2'});
console.log(qux1);
console.log(qux2);