我正在研究在JavaScript中实现多重继承的方法。我已经做了很多关于这个主题的阅读,并且知道有几种方法,每种方法都有自己的优点和缺点,但我还没有找到Object.create()
的全面分析,至少没有一种用我的语言来分析可以理解。我已经做了一些实验,并提出了一种使用Object.create()
真正实现多重继承的方法(参见下面的JSFiddle)。
https://jsfiddle.net/etymhecv/
在上面的小提琴中,p
变量是Person
,e
变量是Employee
(继承自Person
)和{{ 1}}是ae
(继承自独立类AlienEmployee
和Alien
(因此Employee
))。测试Person
正确检测到Person.isPerson(ae)
是AlienEmployee
的类型。
有人可以向我解释一下,使用上述方法可能会遇到哪些不利之处?
答案 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
。