给出一组像这样的Coffeescript类:
class A
class B extends A
class C extends B
有没有办法获得A的子类列表,这样就可以注册它们,例如
A.types = {}
A.types[class.name] = class for class in subclasses(A)
获取
A = {
"A": A,
"B": B,
"C": C
}
唯一想到的是手动将每个类添加到A.types
,但我很好奇是否有办法实现自动化。
我希望已经存在这样的问题和答案,但我无法找到它。
答案 0 :(得分:1)
我能想到的唯一方法是将所有这些类注册到某种命名空间中,并在此命名空间中添加一个查找子类的方法,如下所示:
App =
findSub: (obj) ->
item for className, item of @ when className isnt 'findSub' and ((item.__super__ is undefined and item is obj) or item.__super__ is obj.prototype or item.__super__ instanceof obj)
class App.A
class App.B extends App.A
class App.C extends App.B
class App.D
console.log App.findSub App.A // [A(), B(), C()]