如何从CoffeeScript或JavaScript中的基类(this.constructor.name)引用扩展类的类名

时间:2013-05-27 19:25:40

标签: javascript coffeescript

我有简单的继承。一旦启动,我可以通过查找构造函数名称找出它是什么类:

someClass = new SomeClass()
console.log someClass.constructor.name //SomeClass
base = new Base()
console.log base.constructor.name //Base

我想在save()方法中访问Base类中当前对象的Class的名称,例如:

class Base
  constructor: (obj) ->
    ...
  save: (fn) ->
   @constructor.name

如你所见,我试图通过'@ constructor.name'这样做,但这不起作用。简而言之,我想从基类引用扩展类的名称。怎么办?谢谢

1 个答案:

答案 0 :(得分:1)

通过对示例代码here进行一些更改,我想出了这个

class Shape
  constructor: () ->

  type: () ->
    console.log @constructor.name

class Square extends Shape

class Circle extends Shape

sq = new Square
ci = new Circle

sq.type() // Square
ci.type() // Circle

修改:如果您想在使用类ShapeSquare时获取名称Circle(即调用类的名称)课程被扩展了)那么它将是

console.log @constructor.__super__.constructor.name

看起来很可怕,但我不确定是否有更简单的方法。如果该类不是extends的结果,则可能会导致异常。

当我在生成的 JavaScript

中看到时,我意识到你可以遵循这条路径
function Square() {
    _ref = Square.__super__.constructor.apply(this, arguments);
    return _ref;
}