Question: What is the name for "prop1" - is a property or it's kind of pseudo-property ? Is it correct to be used the name property for both "prop1" and "_prop1" ?
Yes, both are properties. prop1
is an accessor property (with getters/setters) while _prop1
is a data property (simple, writable value).
To solve your problem, just don't use an accessor property:
Object.defineProperty(myObj, "prop1", {
// value: undefined,
writable: true,
enumerable: true
});
If you need an accessor property for some reason, store the value either in a closure variable or in a non-enumerable "hidden" property:
(function() {
var value;
Object.defineProperty(myObj, "prop1", {
get: function(){ return value; },
set: function(v){ value = v; },
enumerable:true
});
})();
Object.defineProperties(myObj, {
"_prop1": {
enumerable: false,
writable: true
},
"prop1": {
get: function(){ return this._prop1; },
set: function(value){ this._prop1 = value; },
enumerable:true
}
});
Object.keys(myObj) // ["prop1"]