-1

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

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

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

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

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

4

1 回答 1

1

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

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

编辑:如果您想Shape在使用类时获取名称SquareCircle(即扩展调用类的类的名称),那么它将是

console.log @constructor.__super__.constructor.name

它看起来很可怕,但我不确定是否有更简单的方法。如果类不是extends.

当我在生成的JavaScript中看到时,我意识到你可以遵循这条路径

function Square() {
    _ref = Square.__super__.constructor.apply(this, arguments);
    return _ref;
}
于 2013-05-27T19:42:21.340 回答