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

Что такое статический метод класса?

1.6 Junior🔥 141 комментариев
#JavaScript Core

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

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

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

Статические методы класса в JavaScript

Статический метод — это метод, который принадлежит самому классу, а не экземпляру (объекту). Статические методы вызываются на классе напрямую, а не на его instance.

Определение статического метода

Чтобы создать статический метод, используй ключевое слово static:

class Calculator {
  // Обычный метод (на экземпляре)
  add(a, b) {
    return a + b;
  }

  // Статический метод (на классе)
  static multiply(a, b) {
    return a * b;
  }
}

// Вызов обычного метода
const calc = new Calculator();
calc.add(2, 3); // 5

// Вызов статического метода
Calculator.multiply(2, 3); // 6

// Ошибка: статический метод недоступен на экземпляре
calc.multiply(2, 3); // TypeError

Ключевые характеристики

1. Обращение к статическому методу

От экземпляра к методу обращаться нельзя, только к классу:

class User {
  constructor(name) {
    this.name = name;
  }

  static create(name) {
    // Фабричный метод — создаёт новый экземпляр
    return new User(name);
  }

  greet() {
    return `Hello, ${this.name}`;
  }
}

const user = User.create('Alice'); // OK: вызов на классе
user.greet(); // OK: "Hello, Alice"
user.create(); // Error: undefined is not a function

2. this в статических методах

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

class Config {
  static appName = 'MyApp';
  static version = '1.0';

  static getInfo() {
    return `${this.appName} v${this.version}`;
  }
}

Config.getInfo(); // "MyApp v1.0"

3. Статические поля

Можно объявлять статические переменные/поля:

class Database {
  static connection = null;
  static timeout = 5000;

  static connect(url) {
    this.connection = new Connection(url);
  }

  static disconnect() {
    this.connection = null;
  }
}

Database.connect('postgres://...');
console.log(Database.timeout); // 5000

Реальные примеры использования

1. Фабричные методы

Статические методы часто используют для создания объектов:

class Date {
  static now() {
    return Date.now(); // встроенный статический метод
  }
}

const timestamp = Date.now(); // 1704067200000

2. Утилиты и вспомогательные функции

class Utils {
  static formatPrice(price) {
    return `$${price.toFixed(2)}`;
  }

  static parseJSON(json) {
    try {
      return JSON.parse(json);
    } catch (e) {
      return null;
    }
  }
}

Utils.formatPrice(19.5); // "$19.50"
Utils.parseJSON('{"key": "value"}'); // { key: 'value' }

3. Синглтоны и управление состоянием

class Logger {
  static logs = [];

  static log(message) {
    this.logs.push({ message, timestamp: Date.now() });
  }

  static getLogs() {
    return this.logs;
  }
}

Logger.log('User logged in');
Logger.log('Page loaded');
console.log(Logger.getLogs()); // array of logs

4. Конфигурация и константы

class AppConfig {
  static API_URL = 'https://api.example.com';
  static DEBUG = true;
  static RETRY_ATTEMPTS = 3;

  static getApiEndpoint(path) {
    return `${this.API_URL}${path}`;
  }
}

fetch(AppConfig.getApiEndpoint('/users'));

Статические методы vs функции

Основная разница — организация кода:

// Функция (не организовано)
function formatPrice(price) { ... }
function formatDate(date) { ... }

// Класс со статическими методами (организованно)
class Formatter {
  static formatPrice(price) { ... }
  static formatDate(date) { ... }
}

Formatter.formatPrice(19.5);

Резюме

Статические методы — это методы класса, а не его экземпляра. Они используются для:

  • Фабричных методов: создание объектов
  • Утилит: общие вспомогательные функции
  • Конфигурации: хранение констант
  • Организации кода: группировка связанной логики

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

Что такое статический метод класса? | PrepBro