使用Object.create()实现多重继承

时间:2016-06-03 00:26:15

标签: javascript multiple-inheritance prototypal-inheritance

我正在研究在JavaScript中实现多重继承的方法。我已经做了很多关于这个主题的阅读,并且知道有几种方法,每种方法都有自己的优点和缺点,但我还没有找到Object.create()的全面分析,至少没有一种用我的语言来分析可以理解。我已经做了一些实验,并提出了一种使用Object.create()真正实现多重继承的方法(参见下面的JSFiddle)。

https://jsfiddle.net/etymhecv/

在上面的小提琴中,p变量是Persone变量是Employee(继承自Person)和{{ 1}}是ae(继承自独立类AlienEmployeeAlien(因此Employee))。测试Person正确检测到Person.isPerson(ae)AlienEmployee的类型。

有人可以向我解释一下,使用上述方法可能会遇到哪些不利之处?

1 个答案:

答案 0 :(得分:3)

  

我提出了一种真正实现多重继承的方法

都能跟得上:

> var ae = AlienEmployee.create("Zeuss", "4321", "Marsodian")
| AlienEmployee.isAlienEmployee(p)
< true
> Alien.isAlien(p)
< false

JavaScript中不可能进行多种原型继承,原型链始终是线性的。

您的create方法成功运用了mixin模式(Object.create/defineProperties(…, Object.getOwnPropertyDescriptors(…))extend / Object.assign),但这并不是我们所知道的动态继承来自Object.create