18-08-24 17:19:52
Статические свойства и методы принадлежат классу, а не его экземплярам. Вы можете определить их с помощью ключевого слова static. Так как они привязаны к самому классу, вы обращаетесь к ним напрямую через класс, а не через его экземпляр.
class MathUtilities {
static pi = 3.14159;
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathUtilities.pi); // Вывод: 3.14159
console.log(MathUtilities.add(2, 3)); // Вывод: 5
console.log(MathUtilities.multiply(4, 5)); // Вывод: 20
В этом примере pi, add и multiply — это статические свойства и методы. Вы обращаетесь к ним напрямую через класс MathUtilities, а не через его экземпляр.
Статические свойства и методы могут наследоваться подклассами. Когда подкласс наследует суперкласс, он может либо использовать статические методы как есть, либо переопределить их своей реализацией.
class Vehicle {
static type = 'Vehicle';
static describeType() {
console.log(`Это ${this.type}.`);
}
}
class Car extends Vehicle {
static type = 'Car';
static describeType() {
super.describeType(); // Вызов статического метода родительского класса
console.log('Автомобили в основном используются для передвижения.');
}
}
Vehicle.describeType(); // Вывод: Это Vehicle.
Car.describeType();
// Вывод:
// Это Car.
// Автомобили в основном используются для передвижения.
В этом примере класс Car наследует статический метод describeType от класса Vehicle. Класс Car переопределяет свойство type и метод describeType. Он также вызывает метод суперкласса describeType с помощью super.
Статические свойства и методы часто используются для утилит, конфигурационных констант или отслеживания общих данных между всеми экземплярами класса. Например:
class User {
static userCount = 0;
constructor(name) {
this.name = name;
User.userCount++;
}
static getUserCount() {
return User.userCount;
}
}
class Admin extends User {
constructor(name, level) {
super(name);
this.level = level;
}
static getUserCount() {
console.log(`Общее количество пользователей (включая администраторов): ${super.getUserCount()}`);
}
}
const user1 = new User('Алиса');
const user2 = new User('Боб');
const admin1 = new Admin('Чарли', 'Супер Администратор');
console.log(User.getUserCount()); // Вывод: 3
Admin.getUserCount(); // Вывод: Общее количество пользователей (включая администраторов): 3
В этом примере класс User отслеживает общее количество созданных пользователей с помощью статического свойства userCount. Класс Admin наследует и расширяет поведение, демонстрируя, как статические свойства могут использоваться для совместного использования данных между различными классами.
Статические свойства и методы в JavaScript предоставляют способ определения поведения на уровне класса, которое не зависит от отдельных экземпляров. В сочетании с наследованием они позволяют создавать общие утилиты, константы и счетчики для связанных классов.