JavaScript - Accessors (get/set)
Overview
Estimated time: 25–35 minutes
Accessors expose properties via functions. Use getters to compute values and setters to validate or transform input.
Learning Objectives
- Define getters and setters in object literals and via
Object.defineProperty
. - Avoid recursion and preserve internal invariants.
Prerequisites
Object literal accessors
const account = {
_balance: 0,
get balance() { return this._balance; },
set balance(v) {
if (v < 0) throw new Error('negative');
this._balance = v;
}
};
account.balance = 10; // calls setter
defineProperty accessors
const r = {};
Object.defineProperty(r, 'area', {
get() { return this.w * this.h; },
set(v) { /* derived value; setter could adjust w/h */ },
enumerable: true
});
Common Pitfalls
- Calling the accessor from inside its own setter/getter can recurse infinitely. Use a different backing field (e.g.,
_name
). - Accessors defined via
defineProperty
default to non-configurable unless specified.