Skip to main content

Що робить ключове слово static?

1. Що таке статична властивість/метод

Зазвичай методи і властивості класу належать екземплярам (об'єктам, створеним через new):

javascript
class User { constructor(name) { this.name = name; // належить екземпляру } sayHi() { // теж належить екземпляру console.log(`Hi, ${this.name}`); } } const u = new User("Alice"); u.sayHi(); // Hi, Alice

А от якщо додати static:

javascript
class User { static role = "User"; static createGuest() { return new User("Guest"); } constructor(name) { this.name = name; } } console.log(User.role); // "User" console.log(User.createGuest()); // User { name: "Guest" } const u = new User("Alice"); console.log(u.role); // undefined: у екземпляра немає доступу до статики

Статика доступна лише через сам клас (User), а не через його об'єкти (u).


2. Навіщо це потрібно

Статичні властивості та методи використовують, коли дані або функції:

  • не залежать від конкретного екземпляра,
  • спільні для всього класу.

Приклади:

  • фабричні методи (User.createGuest()),
  • глобальні константи (Math.PI),
  • службові утиліти (Date.now()).

3. Приклади вбудованих статичних методів

JS сам активно використовує static у стандартних класах:

КласСтатичний метод
MathMath.random(), Math.max()
DateDate.now()
ObjectObject.keys(), Object.assign()
ArrayArray.isArray()

Наприклад, ти не створюєш екземпляр Math, а просто викликаєш Math.max(1, 5, 9), це і є статичний метод.


4. Успадкування статичних методів

Якщо клас успадковує інший (extends), то статичні методи теж успадковуються:

javascript
class Animal { static category = "Animals"; static info() { console.log("This is an animal"); } } class Dog extends Animal {} console.log(Dog.category); // "Animals" Dog.info(); // "This is an animal"

Тобто Dog успадкував статику від Animal.


5. Статика може викликати іншу статику

Усередині статичного методу можна звертатися до інших статичних властивостей через this:

javascript
class Counter { static count = 0; static increment() { this.count++; } static reset() { this.count = 0; } } Counter.increment(); Counter.increment(); console.log(Counter.count); // 2 Counter.reset(); console.log(Counter.count); // 0

Тут this усередині static, це сам клас, а не екземпляр.


6. Відмінність static від звичайних властивостей

ХарактеристикаЗвичайна властивістьСтатична властивість
Де зберігаєтьсяУ кожному екземплярі (this)У самому класі (ClassName)
Доступ через екземплярТакНі
Доступ через класНіТак
Успадковується при extendsТакТак
Контекст this усередині методуЕкземплярКлас

7. Приклад реального використання

Фабричний метод (factory pattern)

javascript
class User { constructor(name, role) { this.name = name; this.role = role; } static createAdmin(name) { return new User(name, "admin"); } static createGuest() { return new User("Guest", "guest"); } } const admin = User.createAdmin("Alice"); const guest = User.createGuest(); console.log(admin); // { name: "Alice", role: "admin" } console.log(guest); // { name: "Guest", role: "guest" }

Зручно, коли потрібно створювати об'єкти за визначеними шаблонами.


8. Можна поєднувати з приватними статичними полями

ES2022 дозволяє оголошувати приватні статичні властивості з #:

javascript
class Config { static #secret = "12345"; static getSecret() { return this.#secret; } } console.log(Config.getSecret()); // "12345" console.log(Config.#secret); // SyntaxError

Такі поля видно лише всередині самого класу, навіть нащадки їх не бачать.


Підсумок

Що робить staticПояснення
Прив'язує властивість/метод до класу, а не до об'єктівДоступ через ClassName, а не через this
Часто використовується для утиліт, констант, фабрикНаприклад, Math.random()
Успадковується при extendsНащадки отримують статику батьківського класу
Усередині static this вказує на сам класМожна звертатися до інших статичних властивостей
Можна зробити приватним (static #field)Видно лише всередині класу

Коротко:

static робить властивість або метод частиною класу, а не частиною його екземплярів. Це ідеальний інструмент для спільних функцій і констант.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.