Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як викликати статичний метод?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Статичний метод викликають безпосередньо через **ім'я класу**: `ClassName.methodName()`, а не через екземпляр, бо статичні методи належать самому класу, а не об'єктам, створеним через `new`; виклик `new User().sayHi()` для статичного `sayHi()` кине `TypeError`. **Ключове:** усередині іншого статичного методу той самий метод можна викликати через `this` (бо `this` там дорівнює самому класу), а в нащадку статичний метод батька викликають через `super.methodName()`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 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 // Dog ``` --- ## 6. Приклад із реального життя: фабричний метод ```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()` | Так | --- **Коротко:** > Статичні методи викликаються **на самому класі**, > а не на його екземплярах: > > ```javascript > ClassName.methodName(); > ```Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.