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.