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

Какой знаешь способ положить что-либо в класс?

2.2 Middle🔥 161 комментариев
#JavaScript Core

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

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

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

Способы добавления свойств и методов в класс в JavaScript

В JavaScript класс — это синтаксический сахар над функциями-конструкторами и прототипами. «Положить что-либо в класс» можно несколькими способами, в зависимости от того, что именно нужно добавить: свойства данных, методы, статические элементы или приватные поля. Рассмотрим основные подходы.

1. В теле класса (поля и методы экземпляра)

Самый прямой способ — объявление в теле класса. С ES2022 поддерживается синтаксис публичных полей.

class User {
  // Публичное поле (инициализируется у каждого экземпляра)
  role = 'user';

  // Конструктор для инициализации свойств при создании объекта
  constructor(name) {
    this.name = name; // "Кладем" свойство через this
  }

  // Метод экземпляра (доступен всем объектам класса)
  greet() {
    return `Hello, I'm ${this.name}`;
  }
}

const user = new User('Alice');
console.log(user.name); // Alice (из конструктора)
console.log(user.role); // user (из поля класса)
console.log(user.greet()); // Hello, I'm Alice

2. Статические свойства и методы

Принадлежат самому классу, а не его экземплярам. Полезны для утилит или констант.

class MathHelper {
  // Статическое свойство
  static PI = 3.14159;

  // Статический метод
  static sum(a, b) {
    return a + b;
  }
}

console.log(MathHelper.PI); // 3.14159
console.log(MathHelper.sum(5, 3)); // 8

// У экземпляра нет доступа:
const helper = new MathHelper();
console.log(helper.PI); // undefined

3. Приватные поля и методы (ES2022)

Добавляются с помощью префикса #. Доступны только внутри класса.

class BankAccount {
  #balance = 0; // Приватное поле

  // Приватный метод
  #logTransaction(amount) {
    console.log(`Изменение: ${amount}`);
  }

  deposit(amount) {
    this.#balance += amount;
    this.#logTransaction(amount);
  }

  getBalance() {
    return this.#balance;
  }
}

const account = new BankAccount();
account.deposit(100); // Изменение: 100
console.log(account.getBalance()); // 100
// account.#balance // Ошибка: приватное поле недоступно

4. Геттеры и сеттеры

Позволяют управлять доступом к свойствам.

class Temperature {
  constructor(celsius) {
    this._celsius = celsius; // Условно приватное свойство
  }

  // Геттер
  get fahrenheit() {
    return (this._celsius * 9) / 5 + 32;
  }

  // Сеттер
  set fahrenheit(value) {
    this._celsius = ((value - 32) * 5) / 9;
  }
}

const temp = new Temperature(25);
console.log(temp.fahrenheit); // 77 (геттер)
temp.fahrenheit = 100; // Используем сеттер
console.log(temp._celsius); // ~37.78

5. Добавление через прототип (устаревший, но важный для понимания)

Классы в JS — это обертка над прототипами. Методы можно добавить напрямую в прототип.

class Car {
  constructor(model) {
    this.model = model;
  }
}

// Добавляем метод после объявления класса
Car.prototype.honk = function () {
  return `${this.model} says beep!`;
};

const myCar = new Car('Toyota');
console.log(myCar.honk()); // Toyota says beep!

Ключевые выводы:

  • Основные способы: объявление в теле класса, конструктор, статические элементы.
  • Приватность: используйте # для инкапсуляции (ES2022+).
  • Геттеры/сеттеры: контроль доступа к данным.
  • Прототипы: понимание этого механизма важно для отладки и продвинутых паттернов.

Выбор способа зависит от задачи: данные экземпляра — поля или конструктор, общая логика — статика, скрытые детали — приватные поля.

Какой знаешь способ положить что-либо в класс? | PrepBro