Я пытаюсь понять mixins в javascript и во всех примерах и статьях, которые я читал до сих пор, речь идет о добавлении методов, а не свойств.
Я нашел статью Алекса Джовера Моралеса действительно полезной, и я немного изменил его пример, добавив в него дополнительные миксины и конструкторы с новыми свойствами в миксинах здесь .
Что я сделал под анти-паттерном?
Есть ли проблема с наличием конструктора и свойств в миксине?
Есть ли проблема с вызовом super () в каждом конструкторе миксина?
const PlayMixin = superclass => class extends superclass {
constructor(args) {
let { favouriteGame } = args
super(args);
this.favouriteGame=favouriteGame;
}
play() {
console.log(`${this.name} is playing ${this.favouriteGame}`);
}
};
const FoodMixin = superclass => class extends superclass {
constructor(args) {
let { genericFood } = args
super(args);
this.genericFood=genericFood;
}
eat() {
console.log(`${this.name} is eating ${this.genericFood}`);
}
poop() {
console.log("Going to ?");
}
};
class Animal {
constructor(args) {
let {name} = args
this.name = name
}
}
class Dog extends PlayMixin(FoodMixin(Animal)) {
constructor(...args) {
super(...args)
}
bark() {
console.log("Woff woff!")
}
haveLunch() {
this.eat();
this.poop();
}
}
const jack = new Dog({name:"Jack", genericFood:"lobster",
favouriteGame:"chess"});
jack.haveLunch();
jack.play();
.as-console-wrapper { max-height: 100%!important; top: 0; }