在Coffeescript / Javascript中自动注册基类

时间:2014-10-29 13:25:57

标签: javascript coffeescript

给出一组像这样的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,但我很好奇是否有办法实现自动化。

我希望已经存在这样的问题和答案,但我无法找到它。

1 个答案:

答案 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()]

jsFiddle