Методи об'єкта після створення
Коротк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 можна додавати методи в об'єкт у будь-який момент - просто присвой йому функцію, і вона стане методом:
javascriptobj.newMethod = function() { ... };
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.