如何将Mixins用于每种类型的继承?

时间:2017-09-10 21:57:37

标签: javascript class inheritance design-patterns mixins

我最近在javascript中主要通过the article Real Mixins with javascript classes看到了Mixin的概念。据我所知,这是一种使用抽象类进行多重继承的方法,它更像是一个组合而不是一个继承。我也在阅读关于继承的概念组合,如the article Composition Over Inheritance。我知道关于继承和组合的讨论可能会很长,但我选择尽可能避免继承(至少现在)。

所以我想尽可能多地使用Mixins和ES6,在大多数例子中,我看到三个类在运行,如class A extends MixinB(C)。如果我只想扩展B类怎么办?我会做class A extends MixinB(Object)之类的事吗?这可能是Mozilla documentation状态的反模式。

请注意,我可以执行class A extends B之类的直接继承,但是这样B不再是Mixin,如果我想使用,我需要B的不同声明它作为Mixin。

2 个答案:

答案 0 :(得分:0)

我认为,您正在寻找的解决方案是改变Mixin函数的定义。

而不是:

MixinB(WhateverClass)

你可以:

Mixin(MainClass, otherClass1, otherClass2...)

这是真的:

MixinB(C) = Mixin(B, C)

答案 1 :(得分:-1)

我不喜欢这个声音!

  

所以我想尽可能多地使用Mixins

在适当的地方使用mixins,而不是因为你想使用它们。继承适用于固定的强关系。当您想要与许多不相关的类共享一小部分功能时,Mixins非常有用。