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 не є функцією
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ