获取已在其上调用静态函数的类的名称

时间:2019-04-08 15:40:53

标签: javascript

所以我的问题如下:我可以获取调用了函数的类的名称吗?为了说明这个问题,我将举一个简短的代码示例。

class Base {
    static getClassName() {
        // get the caller class here
    }
}

class Extended extends Base { }

Base.getClassName(); // Base
Extended.getClassName(); // Extended

任何人都可以告诉我该怎么做,或者说这是否有可能。

2 个答案:

答案 0 :(得分:4)

以下代码应该起作用:

class Base {
  static getClassName() {
    return this.name;
  }
}

class Extended extends Base {}

console.log(Base.getClassName()); // Base
console.log(Extended.getClassName()); // Extended

在静态方法中,this引用类对象本身。

答案 1 :(得分:1)

在ES6中,函数具有只读的name字段(doc)。由于类是函数,因此您可以简单地使用MyClass.name来静态获取类名。

要在运行时获取函数的类名,请引用构造函数的Function.name

class Base {
  getClassName() {
    return this.constructor.name;
  }
}
class Extended extends Base {}
console.log(Base.name);
console.log(Extended.name);

const base = new Base();
console.log(base.getClassName());
const extended = new Extended();
console.log(extended.getClassName());