Skip to main content

Як додати метод у класі?

1. Звичайний (публічний) метод

Метод, доступний у всіх екземплярів класу:

javascript
class User { constructor(name) { this.name = name; } greet() { console.log(`Hi, ${this.name}!`); } } const u = new User("Alice"); u.greet(); // Hi, Alice!

Такі методи автоматично додаються в User.prototype, тобто розділяються між усіма екземплярами (а не створюються заново для кожного об'єкта).


2. Додавання методу після оголошення класу

Ти можеш додати метод у прототип класу вже після його оголошення, вручну:

javascript
class User { constructor(name) { this.name = name; } } // Додаємо метод пізніше User.prototype.sayBye = function () { console.log(`${this.name} каже: бувай!`); }; const u = new User("Alice"); u.sayBye(); // Alice каже: бувай!

Це працює, бо під капотом class, це просто функція з prototype.


3. Статичний метод (static)

Такий метод викликається безпосередньо у класу, а не в екземпляра:

javascript
class MathUtils { static square(n) { return n * n; } } console.log(MathUtils.square(5)); // 25

Екземпляри (new MathUtils()) не мають доступу до static-методів.


4. Геттер і сеттер

Використовуються, щоб "маскувати" властивості під методи:

javascript
class Product { constructor(price) { this._price = price; } get price() { return this._price + " $"; } set price(value) { if (value < 0) throw new Error("Ціна не може бути від'ємною"); this._price = value; } } const p = new Product(1000); console.log(p.price); // "1000 $" p.price = 1500; console.log(p.price); // "1500 $"

Під час доступу p.price фактично викликається get price(), під час присвоєння p.price = ..., викликається set price().


5. Приватні методи (#methodName)

Недоступні ззовні, лише всередині класу:

javascript
class Account { #logBalance() { console.log(`Поточний баланс: ${this.balance}`); } constructor(balance) { this.balance = balance; this.#logBalance(); // можна викликати лише звідси } } const acc = new Account(500); // acc.#logBalance(); Помилка: приватний метод

6. Методи-поля (стрілкові функції)

Якщо хочеш, щоб метод зберігав контекст this, можна оголосити його як поле:

javascript
class Button { label = "Click me"; handleClick = () => { console.log(`Clicked: ${this.label}`); }; } const b = new Button(); b.handleClick(); // Clicked: Click me

Такі методи не втрачають this, навіть якщо передати їх як колбек:

javascript
setTimeout(b.handleClick, 1000); // все працює коректно

Підсумок

Тип методуСинтаксисДоступністьОсобливості
Звичайнийmethod() {}Через екземплярСпільний для всіх екземплярів
Статичнийstatic method() {}Через сам класНе видно в екземплярів
Геттер / сеттерget name() {}, set name(v) {}Як властивістьМожна контролювати доступ
Приватний#method() {}Лише всередині класуПовна інкапсуляція
Поле-метод (стрілка)method = () => {}Через екземплярНе втрачає this

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

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

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