从类直接获取类名
之前的答案已经解释了someClassInstance.constructor.name
可以正常工作,但是如果你需要以编程方式将类名转换为字符串而且不想为此创建实例,请记住:
typeof YourClass === "function"
而且,由于每个函数都有一个name
属性,获取带有您类名称的字符串的另一种好方法只需要执行以下操作:
YourClass.name
接下来的内容是为什么这很有用的一个很好的例子。
加载 Web 组件
正如MDN 文档所教导的,这是如何加载 Web 组件的:
customElements.define("your-component", YourComponent);
在这里,YourComponent
是一个继承自 HTMLElement
的类。由于按照组件标签命名组件类被认为是一种良好的实践,因此编写一个帮助函数以注册所有组件将会很好。以下是该函数:
function registerComponent(componentClass) {
const componentName = upperCamelCaseToSnakeCase(componentClass.name);
customElements.define(componentName, componentClass);
}
所以您需要做的就是:
registerComponent(YourComponent);
这很好,因为这比自己编写组件标记少出错。总之,这就是 upperCamelCaseToSnakeCase()
函数:
function upperCamelCaseToSnakeCase(value) {
return value
.replace(/^([A-Z])/, $1 => $1.toLowerCase())
.replace(/([A-Z])/g, $1 => "-" + $1.toLowerCase());
}
instance.constructor.name
和class.name
可以正确返回ES6中的类名。 - Andrew OdrisomeClassInstance.constructor.name
可能会被修改。 - JamesB.constructor
来获取函数名。 - Nebula