I would like to make some properties of an object to be hidden and some to be visible on iteration. So I tried to use prototype but that's not working:
function Car(){}
Car.prototype.version = '1.0';
var car_instance = new Car();
car_instance.make = 'BMW';
car_instance.model = 'x5';
for(property in car_instance){
    document.body.innerHTML += property + '<br>';
}
But this outputs version too:
make
model
version
I really like the idea to hide some functions/methods but access it easily like car_instance.version, and in fact if I console.log the object it has other properties too under proto which are not included in the for in loop.
So how should I solve this?
If you want to "hide" a property from a for in loop which is a direct property of the instance, you could use Object.defineProperty:
Object.defineProperty(car_instance, "version", {
  value: "1.0",
  writable: true,
  configurable: true,
  enumerable: false  // don't make it appear in a for in loop
});
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With