Не нравится мне эта история в javascript, когда все параметры объекта открыты для редактирования. Как вам такой способ определять параметры, и как вы сами уходите, и уходите ли, от этой проблемы?
Utils = {};
Utils["openProp"] = function(obj, propName){
Object.defineProperty(obj, propName, {
writable: true
});
}
Utils["closeProp"] = function(obj, propName){
Object.defineProperty(obj, propName, {
writable: false
});
};
function Journal(){
return {
newDefProp: function(propName, configurable = true, enumerable = false, value = "", writable = false){
Object.defineProperty(this, propName, {
configurable: configurable,
enumerable: enumerable,
value: value,
writable: writable
});
},
setName: function(value){
Object.openProp(this, "name");
this.name = value;
Object.closeProp(this, "name");
},
getName: function(){
return this.name;
}
};
}
var j = Journal();
j.newDefProp("name");