Что такое геттер (getter) в JavaScript/Node.js?

«Что такое геттер (getter) в JavaScript/Node.js?» — вопрос из категории ООП, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Геттер (getter) — это специальный метод объекта или класса в JavaScript, который позволяет получить значение свойства, динамически вычисляя его при каждом обращении. Объявляется с помощью ключевого слова get.

Основные характеристики:

  • Вызывается как обычное свойство, без скобок ().
  • Не принимает параметров.
  • Позволяет инкапсулировать логику вычисления, сохраняя прозрачный интерфейс доступа.

Пример использования в объекте:

const user = {
  firstName: 'Anna',
  lastName: 'Smith',

  // Геттер для полного имени
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  },

  // Геттер может зависеть от других свойств
  get profileLink() {
    return `/users/${this.firstName.toLowerCase()}-${this.lastName.toLowerCase()}`;
  }
};

console.log(user.fullName); // 'Anna Smith'
console.log(user.profileLink); // '/users/anna-smith'

Пример в классе ES6 (актуально для Node.js):

class Product {
  constructor(price, taxRate) {
    this.price = price;
    this.taxRate = taxRate;
  }

  // Геттер для цены с налогом
  get priceWithTax() {
    return this.price * (1 + this.taxRate);
  }

  // Геттер для "ленивого" кэширования тяжелых вычислений
  get expensiveCalculation() {
    if (!this._cachedResult) {
      console.log('Performing heavy computation...');
      this._cachedResult = this.price * Math.PI; // Пример вычисления
    }
    return this._cachedResult;
  }
}

const item = new Product(100, 0.2);
console.log(item.priceWithTax); // 120
console.log(item.expensiveCalculation); // Выполнит вычисление
console.log(item.expensiveCalculation); // Вернёт закэшированное значение

Зачем это нужно в Node.js: Геттеры полезны для создания вычисляемых полей в моделях (например, в ORM типа Sequelize), реализации паттерна «ленивая загрузка», валидации данных перед возвратом и обеспечения обратной совместимости при рефакторинге внутренней структуры объекта.