8.1 Объявление статических методов
Статические методы в JavaScript — это методы, которые определяются на самом классе, а не на его экземплярах. Они вызываются непосредственно на классе, а не на объектах, созданных этим классом. Статические методы часто используются для создания вспомогательных функций, которые имеют отношение к классу, но не к конкретным объектам.
Статические методы объявляются с использованием ключевого слова static перед определением метода в теле класса.
Пример:
- Методы
addиmultiplyобъявлены как статические с использованием ключевого словаstatic - Эти методы вызываются непосредственно на классе
MathHelper, а не на его экземплярах
class MathHelper {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathHelper.add(5, 3)); // 8
console.log(MathHelper.multiply(5, 3)); // 15
8.2 Использование статических методов
Статические методы полезны в следующих сценариях:
- Вспомогательные функции: статические методы могут быть использованы для создания утилитарных функций, которые выполняют операции, связанные с классом.
- Фабричные методы: статические методы могут использоваться для создания экземпляров класса с определенной логикой.
- Обработка данных: статические методы могут использоваться для обработки данных, связанных с классом, но не требующих создания экземпляров класса.
Пример вспомогательных функций:
- Класс
StringUtilсодержит статические методыcapitalizeиreverse, которые работают со строками - Эти методы вызываются непосредственно на классе
StringUtil
class StringUtil {
static capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
static reverse(str) {
return str.split('').reverse().join('');
}
}
console.log(StringUtil.capitalize('hello')); // "Hello"
console.log(StringUtil.reverse('hello')); // "olleh"
Пример фабричного метода:
Статический метод fromObject создает экземпляр класса Car из объекта данных.
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
static fromObject(obj) {
return new Car(obj.brand, obj.model);
}
}
const carData = { brand: 'Toyota', model: 'Camry' };
const car = Car.fromObject(carData);
console.log(car.brand); // "Toyota"
console.log(car.model); // "Camry"
8.3 Статические методы и наследование
В JavaScript статические методы также наследуются производными классами. Производные классы могут использовать статические методы базового класса или переопределять их.
Пример наследования статических методов:
- Статический метод
identifyопределен в классеAnimalи переопределен в классеDog - Вызывается метод
identifyна обоих классах
class Animal {
static identify() {
return 'This is an animal';
}
}
class Dog extends Animal {
static identify() {
return 'This is a dog';
}
}
console.log(Animal.identify()); // "This is an animal"
console.log(Dog.identify()); // "This is a dog"
8.4 Доступ к статическим методам внутри других методов
Статические методы могут быть вызваны внутри других методов класса с использованием имени класса.
Пример:
Статический метод calculateArea вызывается внутри другого статического метода describeCircle с использованием ключевого слова this, которое в данном контексте ссылается на сам класс Geometry.
class Geometry {
static calculateArea(radius) {
return Math.PI * radius * radius;
}
static describeCircle(radius) {
const area = this.calculateArea(radius);
return `A circle with radius ${radius} has an area of ${area.toFixed(2)}.`;
}
}
console.log(Geometry.describeCircle(5)); // "A circle with radius 5 has an area of 78.54."
8.5 Статические методы и инстансы класса
Статические методы не могут быть вызваны на экземплярах класса. Попытка вызова статического метода на экземпляре приведет к ошибке.
Пример:
Статический метод add вызывается на классе Calculator, а не на его экземпляре calc.
class Calculator {
static add(a, b) {
return a + b;
}
}
const calc = new Calculator();
console.log(Calculator.add(3, 4)); // 7
console.log(calc.add(3, 4)); // Ошибка: calc.add не является функцией
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ