Obtener el nombre de la clase directamente de la clase
Las respuestas anteriores explicaron que someClassInstance.constructor.name
funciona bien, pero si necesita convertir mediante programación el nombre de la clase en una cadena y no desea crear una instancia solo para eso, recuerde que:
typeof YourClass === "function"
Y, dado que cada función tiene una name
propiedad, otra buena manera de obtener una cadena con el nombre de su clase es simplemente hacer:
YourClass.name
Lo que sigue es un buen ejemplo de por qué esto es útil.
Cargando componentes web
Como nos enseña la documentación de MDN , así es como carga un componente web:
customElements.define("your-component", YourComponent);
¿ YourComponent
Desde dónde se extiende una clase HTMLElement
? Dado que se considera una buena práctica nombrar la clase de su componente después de la etiqueta del componente en sí, sería bueno escribir una función auxiliar que todos sus componentes puedan usar para registrarse. Así que aquí está esa función:
function registerComponent(componentClass) {
const componentName = upperCamelCaseToSnakeCase(componentClass.name);
customElements.define(componentName, componentClass);
}
Entonces, todo lo que necesitas hacer es:
registerComponent(YourComponent);
Lo cual es bueno porque es menos propenso a errores que escribir la etiqueta del componente usted mismo. Para concluir, esta es la upperCamelCaseToSnakeCase()
función:
// converts `YourString` into `your-string`
function upperCamelCaseToSnakeCase(value) {
return value
// first char to lower case
.replace(/^([A-Z])/, $1 => $1.toLowerCase())
// following upper chars get preceded with a dash
.replace(/([A-Z])/g, $1 => "-" + $1.toLowerCase());
}
instance.constructor.name
yclass.name
devuelva el nombre de la clase en ES6 adecuado.