Ottenere il nome della classe direttamente dalla classe
Le risposte precedenti hanno spiegato che someClassInstance.constructor.name
funziona bene, ma se è necessario convertire a livello di codice il nome della classe in una stringa e non si desidera creare un'istanza solo per quello, ricordare che:
typeof YourClass === "function"
E poiché ogni funzione ha una name
proprietà, un altro modo carino per ottenere una stringa con il nome della tua classe è semplicemente fare:
YourClass.name
Quello che segue è un buon esempio del perché questo è utile.
Caricamento dei componenti Web
Come ci insegna la documentazione MDN , ecco come caricare un componente Web:
customElements.define("your-component", YourComponent);
Da dove YourComponent
si estende una classe HTMLElement
. Dato che è buona norma nominare la classe del componente in base al tag del componente stesso, sarebbe utile scrivere una funzione di supporto che tutti i componenti potrebbero utilizzare per registrarsi. Quindi ecco quella funzione:
function registerComponent(componentClass) {
const componentName = upperCamelCaseToSnakeCase(componentClass.name);
customElements.define(componentName, componentClass);
}
Quindi tutto ciò che devi fare è:
registerComponent(YourComponent);
Il che è bello perché è meno soggetto a errori rispetto alla scrittura del tag componente da soli. Per concludere, questa è la upperCamelCaseToSnakeCase()
funzione:
// 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
eclass.name
restituisci il nome della classe in ES6 corretto.