8.1 Deklaracja metod statycznych
Metody statyczne w JavaScript to metody, które są definiowane na samej klasie, a nie na jej instancjach. Są wywoływane bezpośrednio na klasie, a nie na obiektach utworzonych przez tę klasę. Metody statyczne często są używane do tworzenia funkcji pomocniczych, które mają związek z klasą, ale nie z konkretnymi obiektami.
Metody statyczne są deklarowane za pomocą słowa kluczowego static
przed definicją metody w ciele klasy.
Przykład:
- Metody
add
imultiply
są zadeklarowane jako statyczne z użyciem słowa kluczowegostatic
- Te metody są wywoływane bezpośrednio na klasie
MathHelper
, a nie na jej instancjach
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 Użycie metod statycznych
Metody statyczne są przydatne w następujących scenariuszach:
- Funkcje pomocnicze: metody statyczne mogą być użyte do tworzenia funkcji użytkowych, które wykonują operacje związane z klasą.
- Metody fabryczne: metody statyczne mogą być używane do tworzenia instancji klasy z określoną logiką.
- Przetwarzanie danych: metody statyczne mogą być używane do przetwarzania danych związanych z klasą, ale nie wymagających tworzenia instancji klasy.
Przykład funkcji pomocniczych:
- Klasa
StringUtil
zawiera metody statycznecapitalize
ireverse
, które działają na łańcuchach - Te metody są wywoływane bezpośrednio na klasie
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"
Przykład metody fabrycznej:
Metoda statyczna fromObject
tworzy instancję klasy Car
z obiektu danych.
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 Metody statyczne i dziedziczenie
W JavaScript metody statyczne są również dziedziczone przez klasy pochodne. Klasy pochodne mogą używać metod statycznych klasy bazowej lub je przedefiniować.
Przykład dziedziczenia metod statycznych:
- Metoda statyczna
identify
jest zdefiniowana w klasieAnimal
i przedefiniowana w klasieDog
- Metoda
identify
jest wywoływana na obu klasach
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 Dostęp do metod statycznych wewnątrz innych metod
Metody statyczne mogą być wywoływane wewnątrz innych metod klasy z użyciem nazwy klasy.
Przykład:
Metoda statyczna calculateArea
jest wywoływana wewnątrz innej metody statycznej describeCircle
z użyciem słowa kluczowego this
, które w tym kontekście odnosi się do samej klasy 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 Metody statyczne i instancje klasy
Metody statyczne nie mogą być wywoływane na instancjach klasy. Próba wywołania metody statycznej na instancji spowoduje błąd.
Przykład:
Metoda statyczna add
jest wywoływana na klasie Calculator
, a nie na jej instancji 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)); // Błąd: calc.add nie jest funkcją
GO TO FULL VERSION