Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Статические методы класса в 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, но имеют доступ к статическим полям класса.