我有简单的继承。一旦启动,我可以通过查找构造函数名称找出它是什么类:
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'这样做,但这不起作用。简而言之,我想从基类引用扩展类的名称。怎么办?谢谢
答案 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
修改:如果您想在使用类Shape
或Square
时获取名称Circle
(即调用类的名称)课程被扩展了)那么它将是
console.log @constructor.__super__.constructor.name
看起来很可怕,但我不确定是否有更简单的方法。如果该类不是extends
的结果,则可能会导致异常。
当我在生成的 JavaScript
中看到时,我意识到你可以遵循这条路径function Square() {
_ref = Square.__super__.constructor.apply(this, arguments);
return _ref;
}