Codectionary / Developer documentation / JavaScript

Getters and Setters

Getters and setters let you define object or class properties that run custom logic when read or assigned, while still being accessed with normal property syntax (no parentheses). They are useful for computed properties, validation on assignment, or controlling access to internal state.

Syntax

get propName() { return value; }
set propName(value) { }

Examples

Getters and Setters in a Class

Computing a value on read, and validating on write.

class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }

  get area() {
    return this.width * this.height; // computed, not stored
  }

  set width(value) {
    if (value <= 0) throw new Error("Width must be positive");
    this._width = value;
  }

  get width() {
    return this._width;
  }
}

const rect = new Rectangle(5, 10);
console.log(rect.area); // 50 - accessed like a property, no parentheses
rect.width = 8;
console.log(rect.area); // 80 - automatically recalculated

Getters and Setters in a Plain Object

The same pattern applied to a regular object literal.

const user = {
  firstName: "Alice",
  lastName: "Smith",
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  },
  set fullName(value) {
    [this.firstName, this.lastName] = value.split(" ");
  }
};

console.log(user.fullName); // "Alice Smith"
user.fullName = "Bob Jones";
console.log(user.firstName); // "Bob"

Best practices

  • Use getters for values that are computed from other properties, rather than storing and manually keeping a duplicate value in sync
  • Use setters to validate or transform incoming values before they are stored
  • Avoid heavy computation or side effects inside getters - since they look like simple property access, callers do not expect them to be expensive or to change state
  • Prefix the underlying storage property with an underscore (like _width) by convention when a getter/setter shares a similar public name

Runtime & versions

Browsers and JavaScript runtimes. Feature availability depends on the language and runtime version used by your project; consult the official reference below.

ECMAScript specification

Specifications & further reading