从typescript中的静态方法中检索类名

cen*_*eth 5 javascript typescript

我试图从静态方法中检索类名.它适用于普通方法,但不适用于静态方法

 class MyNode{
    constructor(){
        var classname=this.constructor.toString().split ('(' || /s+/)[0].split (' ' || /s+/)[1];
        console.log(classname);
    }
    static a_static_method(){
        var classname=this.constructor.toString().split ('(' || /s+/)[0].split (' ' || /s+/)[1];
        console.log(classname);
    }
}
var obj=new MyNode(); // THIS WORKS, prints "MyNode" 
MyNode.a_static_method(); // THIS DOESN'T, prints "Function"
Run Code Online (Sandbox Code Playgroud)

我忘了告诉它:它应该适用于MyNode的派生类.

ape*_*pen 8

现在你可以使用了 this.name

  • 从静态上下文中引用 this 感觉很奇怪,但它确实有效。 (2认同)
  • 官方 TS 1.8 文档说明 (8.2.1):“在静态成员函数和静态成员访问器中,this 的类型是构造函数类型。” (2认同)

小智 5

请检查以下解决方案:

class MyNode{
    constructor(){
        var classname=this.constructor.toString().split ('(' || /s+/)[0].split (' ' || /s+/)[1];
        console.log(classname);
    }
    static a_static_method(){
        var classname = this.toString().split ('(' || /s+/)[0].split (' ' || /s+/)[1];
        console.log(classname);
    }
}
Run Code Online (Sandbox Code Playgroud)

在派生类中,您将获得该类的名称,而不是 MyNode

  • 这个答案已经很老了,请看下面的答案。显然,你现在可以使用“this.name”。 (2认同)