Я смотрел учебник по композиции, и он заставляет вас сочинять такие объекты:
const eater = (state) => ({
eat(amount) {
console.log(state.name + ' is eating');
state.energy += amount;
}
});
// using a factory
const Dog = (name, energy, breed) => {
let dog = {
name,
energy,
breed
};
return Object.assign(dog, eater(dog));
};
const leo = Dog('Leo', 10, 'Pug');
leo.eat(10); // Leo is eating
console.log(leo.energy); // 20
Мне было бы интересно, если бы вы могли сделать что-то подобное вместо этого, и есть ли какие-либо недостатки этого сделать:
const eater = {
eat(amount) {
console.log(this.name + ' is eating');
this.energy += amount;
}
};
const Dog = (name, energy, breed) => {
let dog = {
name,
energy,
breed,
...eater
};
return dog;
};
const leo = Dog('Leo', 10, 'Pug');
leo.eat(10); // Leo is eating
console.log(leo.energy); // 20
Как видите, вместо создания и назначения функции для объекта с помощью Object.assign
я создаю другой объект eater
с помощью метода, а затем распространяю этот eater
объект и добавьте его к dog
объекту, создаваемому внутри фабрики.
Итак, что-то не так с этим?
Спасибо!