javascript mixins 中的构造函数和类属性

Thi*_*hel 6 javascript multiple-inheritance mixins

我正在尝试理解 javascript 中的 mixin 以及到目前为止我读过的所有示例和文章都讨论添加方法而不是属性。

我发现Alex Jover Morales 的文章非常有用,我稍微修改了他的示例,在此处的 mixin 中包含了一个额外的 mixin 和具有新属性的构造函数。

我在下面所做的事情是反模式吗?mixin 中的构造函数和属性有问题吗?在每个 mixin 的构造函数中调用 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();
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100%!important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

Jon*_*lms 5

我在下面所做的事情是反模式吗?

不它不是。

mixin 中的构造函数和属性有问题吗?

不,只要您super(...)以适合所有混合班级的方式进行呼叫即可。

在每个 mixin 的构造函数中调用 super() 是否存在问题?

不,super总是指向扩展类,调用该构造函数没有问题。