To add to Pointy's ...point,
You can use getters and setters as a language feature, by putting them inside of Object Literals.
Your original constructor could be turned into a factory, with instance-based getters and setters simply by doing the following:
function makeAnObject () {
var hiddenApple = "Granny Smith";
return {
get apple () { return hiddenApple; },
set apple (ignore) { return hiddenApple; }
};
}
var thing = makeAnObject();
thing.apple;
thing.apple = "Crab Apple";
Keep in mind that depending on getters/setters will flat-out explode on older browsers (IE8 being the real stickler here), used this way.
Also, using them inside of defineProperties is fine for preventing IE8 from exploding (as it's no longer a language construct)... ...buuuut, it doesn't actually add getters/setters, either (even with polyfills to add the method to Object, and not just DOM Elements), and thus, will have bugged behaviour, either due to syntax explosions, or due to doing something completely different from your other browsers.
This might not apply to you right now, and hopefully it never does...
...some of us still live in that horrible reality.
setmethod.