Obtenir le nom de la classe directement depuis la classe
Les réponses précédentes ont expliqué que cela someClassInstance.constructor.name
fonctionne très bien, mais si vous devez convertir par programme le nom de la classe en une chaîne et que vous ne voulez pas créer une instance juste pour cela, rappelez-vous que:
typeof YourClass === "function"
Et, puisque chaque fonction a une name
propriété, une autre manière intéressante d'obtenir une chaîne avec le nom de votre classe est de simplement faire:
YourClass.name
Ce qui suit est un bon exemple de pourquoi cela est utile.
Chargement des composants Web
Comme nous l'enseigne la documentation MDN, voici comment charger un composant Web:
customElements.define("your-component", YourComponent);
D'où YourComponent
vient une classe qui s'étend HTMLElement
. Puisqu'il est considéré comme une bonne pratique de nommer la classe de votre composant après la balise de composant elle-même, il serait bien d'écrire une fonction d'assistance que tous vos composants pourraient utiliser pour s'enregistrer. Voici donc cette fonction:
function registerComponent(componentClass) {
const componentName = upperCamelCaseToSnakeCase(componentClass.name);
customElements.define(componentName, componentClass);
}
Il vous suffit donc de:
registerComponent(YourComponent);
Ce qui est bien car c'est moins sujet aux erreurs que d'écrire vous-même la balise de composant. Pour conclure, voici la upperCamelCaseToSnakeCase()
fonction:
// 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
etclass.name
renvoyez le nom de la classe dans ES6 approprié.