Hack Frontend Community

Статические методы в JavaScript (Static Methods)

Статические методы — это методы, которые определяются на уровне класса и доступны только через сам класс, а не через его экземпляры. Такие методы предназначены для реализации функциональности, которая не зависит от состояния конкретного объекта, и обычно используются для утилитарных операций, фабричных функций или вспомогательных расчетов.

Объявление и использование

Статические методы объявляются с помощью ключевого слова static внутри объявления класса. Их нельзя вызывать через экземпляр класса — для доступа к ним необходимо обращаться напрямую через имя класса.

class MathUtils {
  // Статический метод для вычисления суммы двух чисел
  static sum(a, b) {
    return a + b;
  }
}

// Вызов статического метода через имя класса
console.log(MathUtils.sum(5, 7)); // 12

// Попытка вызвать метод через экземпляр класса приведёт к ошибке:
const utils = new MathUtils();
// utils.sum(5, 7); // Ошибка: utils.sum is not a function

Применение статических методов

  • Утилитарные функции: Методы, которые выполняют независимые операции (например, арифметические вычисления, форматирование дат), хорошо подходят для объявления как статические.

  • Фабричные методы: Можно создать статический метод, который возвращает новый экземпляр класса на основе каких-либо входных данных.

  • Вспомогательные функции: Методы, которые не требуют доступа к состоянию конкретного экземпляра, а лишь обрабатывают переданные данные.

Пример фабричного метода

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  // Статический метод для создания экземпляра Person из строки
  static fromString(str) {
    const [name, age] = str.split(", ");
    return new Person(name, parseInt(age, 10));
  }
}

const personData = "Alice, 30";
const alice = Person.fromString(personData);
console.log(alice.name); // "Alice"
console.log(alice.age);  // 30

В данном примере статический метод fromString принимает строку, парсит её и возвращает новый объект Person. Это позволяет инкапсулировать логику создания объекта непосредственно в классе.

Итог

  • Статические методы определяются с ключевым словом static и принадлежат классу, а не его экземплярам.

  • Они используются для реализации функциональности, которая не зависит от конкретного состояния объекта, таких как утилитарные и фабричные функции.

  • Для доступа к статическим методам необходимо обращаться к ним через имя класса.

Статические методы помогают организовать вспомогательные функции внутри класса, делая код более структурированным и поддерживаемым.

Важное замечание:

Статические свойства используются в тех случаях, когда мы хотели бы сохранить данные на уровне класса, а не какого-то одного объекта. Например методы Math.max(), Math.min(), Array.isArray(), Promise.all() и т.д.