Свойства конструктора и класса в javascript mixins - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь понять 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; }

1 Ответ

0 голосов
/ 17 ноября 2018

Что я сделал ниже анти-паттерна?

Нет, это не так.

Есть ли проблема с наличием конструктора исвойства в миксине?

Нет, если вы вызываете super(...) таким образом, что это работает для всех смешанных классов.

Есть ли проблема с вызовом super () внутриКонструктор каждого миксина?

Нет, super всегда указывает на расширенный класс, при вызове этого конструктора проблем нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...