Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Методи об'єкта після створення». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Так, можна.** Достатньо просто присвоїти об'єкту нову властивість, значенням якої є функція. **Ключове:** метод можна додати одним присвоєнням (`obj.method = function() {}`), через `Object.assign()` для кількох методів одразу, або через `prototype`, щоб метод з'явився в усіх екземплярах.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Короткa відповідь **Так, можна!** Ти можеш просто присвоїти об'єкту нову властивість, значення якої - функція. --- ## Приклад ```javascript const user = { name: 'Тим' }; // додаємо метод після створення user.sayHi = function() { console.log(`Привіт, ${this.name}!`); }; user.sayHi(); // "Привіт, Тим!" ``` Ми додали метод `sayHi` уже *після* оголошення об'єкта - і тепер він став повноцінним методом об'єкта. --- ## Можна додавати стрілкові функції (але обережно) ```javascript user.sayBye = () => { console.log(`Бувай, ${user.name}!`); }; user.sayBye(); // "Бувай, Тим!" ``` Різниця: - `function()` має свій `this` (вказує на сам об'єкт при виклику як `user.sayHi()`); - стрілкова функція `=>` **не має власного** `this`, тому всередині неї `this` не буде посилатися на об'єкт. Зазвичай для методів використовують **звичайні функції**, а не стрілкові. --- ## Приклад із кількома методами ```javascript const calculator = {}; calculator.add = function(a, b) { return a + b; }; calculator.multiply = function(a, b) { return a * b; }; console.log(calculator.add(2, 3)); // 5 console.log(calculator.multiply(2, 3)); // 6 ``` Методи можна додавати скільки завгодно і коли завгодно. --- ## Можна додавати через `Object.assign()` ```javascript const user = { name: 'Тим' }; Object.assign(user, { sayHi() { console.log(`Привіт, ${this.name}`); }, sayBye() { console.log(`Бувай, ${this.name}`); } }); user.sayHi(); // "Привіт, Тим" user.sayBye(); // "Бувай, Тим" ``` Зручно, якщо потрібно додати одразу кілька методів. --- ## Можна додати метод у прототип (пошириться на всі об'єкти) ```javascript function User(name) { this.name = name; } User.prototype.sayHi = function() { console.log(`Привіт, ${this.name}`); }; const tim = new User('Тим'); const oleh = new User('Oleh'); tim.sayHi(); // "Привіт, Тим" oleh.sayHi(); // "Привіт, Oleh" ``` Цей спосіб додає метод **усім екземплярам**, створеним через `new User()`. --- ## ПІДСУМОК | Спосіб | Коли використовувати | Приклад | |---|---|---| | `obj.method = function() {}` | Додати один метод | `user.sayHi = ...` | | `Object.assign(obj, { ... })` | Додати кілька методів | `Object.assign(user, { sayHi, sayBye })` | | `prototype.method = ...` | Додати метод усім екземплярам | `User.prototype.sayHi = ...` | --- **В одній фразі:** > Так, у JavaScript можна додавати методи в об'єкт у будь-який момент - > просто присвой йому функцію, і вона стане методом: > > ```javascript > obj.newMethod = function() { ... }; > ```Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.