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

标签 javascript multiple-inheritance mixins

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

我找到了Alex Jover Morales' article真的很有用,我稍微修改了他的示例,在 mixin 中包含了一个额外的 mixin 和具有新属性的构造函数 here

我在下面所做的事情是反模式吗? 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();
.as-console-wrapper { max-height: 100%!important; top: 0; }

最佳答案

Is what i have done below an anti-pattern?

不,不是。

Is there a problem with having a constructor and properties within a mixin?

不,只要您以适用于所有混合类的方式调用 super(...) 即可。

Is there a problem with calling super() within each mixin's contructor?

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

关于javascript - javascript mixins 中的构造函数和类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53349705/

相关文章:

javascript - 分类数据的 Mapbox 数据驱动样式 - 如何将表达式与数组输入匹配?

javascript - 如何在 ngOnInIt 函数中使用异步与 Angular8 firestore?

用于类和子类的 Python IsInstance()

c++ - 为什么 C++ 编译器不能区分继承的公共(public)方法和继承的同名私有(private)方法?

css - Sass mixin 或返回 mixin 的函数

python多重继承在 super 上下文中调用重写函数

javascript - 是否可以在一个数组中对 Jekyll Collection 和 Jekyll Data 进行排序?

javascript - PHP/HTML 提交后记住所选值 - 从 MySQL 填充的选项

c++ - 关于 C++ 中的多重继承、虚拟基类和对象大小的问题

少CSS,请向我解释高级参数和@rest 变量?