← Назад к вопросам

Что такое вычисляемые свойства?

1.7 Middle🔥 151 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое вычисляемые свойства (Computed Properties)?

Вычисляемые свойства — это специальный тип свойств в объектах или классах, которые не хранят значение напрямую, а вычисляют его динамически при обращении, на основе других данных (например, других свойств объекта). Они объединяют концепции геттеров (getters) и иногда сеттеров (setters), предоставляя интерфейс, похожий на обычное свойство, но с логикой вычисления "под капотом". Это распространённая концепция в таких фреймворках, как Vue.js (где computed properties являются ключевой частью реактивности) и в JavaScript (через Object.defineProperty() или классы ES6).

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

  • Динамическое вычисление: Значение вычисляется "на лету" при каждом обращении к свойству (или кэшируется, как в Vue.js).
  • Зависимость от других данных: Они обычно полагаются на другие свойства объекта, и их значение автоматически обновляется при изменении этих зависимостей.
  • Синтаксис как у обычного свойства: Доступ осуществляется как obj.property, а не как вызов метода obj.method(), что улучшает читаемость.
  • Кэширование (в некоторых реализациях): Например, во Vue.js вычисляемые свойства кэшируют результат до изменения зависимостей, что повышает производительность.

Примеры в JavaScript (нативные)

Использование геттеров в объектах ES6:

const person = {
  firstName: 'Иван',
  lastName: 'Петров',
  
  // Вычисляемое свойство fullName
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  },
  
  // Сеттер для обновления зависимых свойств
  set fullName(value) {
    const parts = value.split(' ');
    this.firstName = parts[0];
    this.lastName = parts[1] || '';
  }
};

console.log(person.fullName); // "Иван Петров"
person.fullName = 'Алексей Сидоров';
console.log(person.firstName); // "Алексей"

Использование в классах ES6:

class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }
  
  // Вычисляемое свойство для площади
  get area() {
    return this.width * this.height;
  }
  
  // Вычисляемое свойство для периметра
  get perimeter() {
    return 2 * (this.width + this.height);
  }
}

const rect = new Rectangle(5, 10);
console.log(rect.area);      // 50
console.log(rect.perimeter); // 30

Пример во Vue.js (реактивные вычисляемые свойства)

Во Vue.js вычисляемые свойства — это мощный инструмент для декларативной работы с реактивными данными. Они автоматически отслеживают зависимости и обновляются только при их изменении.

// Компонент Vue
new Vue({
  data() {
    return {
      firstName: 'Мария',
      lastName: 'Иванова',
      items: [1, 2, 3, 4, 5]
    };
  },
  computed: {
    // Простое вычисляемое свойство
    fullName() {
      return `${this.firstName} ${this.lastName}`;
    },
    
    // Вычисляемое свойство с более сложной логикой
    evenItems() {
      return this.items.filter(item => item % 2 === 0);
    },
    
    // Вычисляемое свойство с геттером и сеттером
    reversedName: {
      get() {
        return this.fullName.split('').reverse().join('');
      },
      set(value) {
        const normal = value.split('').reverse().join('');
        const parts = normal.split(' ');
        this.firstName = parts[0];
        this.lastName = parts[1];
      }
    }
  }
});

Преимущества вычисляемых свойств

  • Инкапсуляция логики: Сложные вычисления скрыты за простым интерфейсом свойства.
  • Реактивность: В современных фреймворках они автоматически реагируют на изменения данных.
  • Производительность: За счёт кэширования (например, во Vue.js) избегаются лишние вычисления.
  • Читаемость кода: Код становится более декларативным и понятным.
  • Согласованность данных: Гарантируют, что производные данные всегда актуальны.

Отличия от методов и наблюдаемых свойств

  • vs Методы: Методы выполняются при каждом вызове, а вычисляемые свойства могут кэшировать результат. Используйте методы, когда нужно выполнить действие или результат зависит от аргументов.
  • vs Наблюдаемые свойства (watchers): Во Vue.js вотчеры реагируют на изменения и выполняют побочные эффекты, а вычисляемые свойства используются для получения производного значения.

Заключение

Вычисляемые свойства — это элегантный паттерн, который сочетает удобство использования свойств объекта с гибкостью методов. Они особенно полезны в реактивных фреймворках, где упрощают управление состоянием, делая код более поддерживаемым и эффективным. Понимание этой концепции критически важно для современной фронтенд-разработки, особенно при работе с Vue.js, React (где аналогичную роль играют useMemo/useCallback) или нативным JavaScript.

Что такое вычисляемые свойства? | PrepBro