Як викликати статичний метод?
1. Синтаксис виклику статичного методу
javascript
class User {
static sayHi() {
console.log("Hi from the User class!");
}
}
// Правильно:
User.sayHi(); // Hi from the User class!
// Неправильно:
const u = new User();
u.sayHi(); // TypeError: u.sayHi is not a functionПричина: статичні методи належать самому класу,
а не об'єктам, створеним за допомогою new.
2. Приклад із параметрами
javascript
class MathUtils {
static sum(a, b) {
return a + b;
}
}
console.log(MathUtils.sum(3, 5)); // 8Тут
MathUtils.sum()викликається безпосередньо через ім'я класу.
3. Статичні методи при успадкуванні
Якщо клас успадковує інший (extends),
він теж отримує доступ до статичних методів батьківського класу:
javascript
class Animal {
static info() {
console.log("This is an animal");
}
}
class Dog extends Animal {}
Dog.info(); // "This is an animal"
extendsуспадковує і звичайні, і статичні методи.
4. Виклик статичного методу всередині класу
Ти можеш викликати статичні методи:
- або через ім'я класу (
User.someMethod()), - або через
this(усередині інших статичних методів), - але не з екземпляра.
javascript
class User {
static hello() {
console.log("Hi!");
}
static greetAll() {
this.hello(); // працює: `this` = сам клас
}
sayHi() {
// Не можна викликати static звідси напряму
// this.hello(); // TypeError
User.hello(); // можна через ім'я класу
}
}
const u = new User();
User.greetAll(); // Hi!
u.sayHi(); // Hi!5. Виклик статичного методу батьківського класу через super
Якщо є успадкування, можна викликати статичний метод батьківського класу за допомогою super:
javascript
class Animal {
static describe() {
console.log("Animal");
}
}
class Dog extends Animal {
static describe() {
super.describe(); // викликає Animal.describe()
console.log("Dog");
}
}
Dog.describe();
// Animal
// Dog6. Приклад із реального життя: фабричний метод
javascript
class User {
constructor(name, role) {
this.name = name;
this.role = role;
}
static createGuest() {
return new User("Guest", "guest");
}
}
const guest = User.createGuest(); // виклик статичного методу
console.log(guest); // { name: "Guest", role: "guest" }Тут User.createGuest() повертає новий екземпляр,
але сам метод належить класу, а не об'єкту.
Підсумок
| Де викликається | Приклад | Працює? |
|---|---|---|
| На класі | User.sayHi() | Так |
| На екземплярі | new User().sayHi() | Ні |
Усередині іншого static | this.otherStatic() | Так |
| Усередині звичайного методу | ClassName.staticMethod() | Так |
У нащадку через super | super.staticMethod() | Так |
Коротко:
Статичні методи викликаються на самому класі, а не на його екземплярах:
javascriptClassName.methodName();
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.