所以我的问题如下:我可以获取调用了函数的类的名称吗?为了说明这个问题,我将举一个简短的代码示例。
class Base {
static getClassName() {
// get the caller class here
}
}
class Extended extends Base { }
Base.getClassName(); // Base
Extended.getClassName(); // Extended
任何人都可以告诉我该怎么做,或者说这是否有可能。
答案 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());