Abrufen des Klassennamens direkt von der Klasse
In früheren Antworten wurde erklärt, dass dies einwandfrei someClassInstance.constructor.name
funktioniert. Wenn Sie jedoch den Klassennamen programmgesteuert in eine Zeichenfolge konvertieren müssen und keine Instanz dafür erstellen möchten, denken Sie daran:
typeof YourClass === "function"
Und da jede Funktion eine name
Eigenschaft hat, können Sie auch eine Zeichenfolge mit Ihrem Klassennamen abrufen:
YourClass.name
Was folgt, ist ein gutes Beispiel dafür, warum dies nützlich ist.
Laden von Webkomponenten
Wie aus der MDN-Dokumentation hervorgeht , laden Sie eine Webkomponente folgendermaßen:
customElements.define("your-component", YourComponent);
Wo YourComponent
ist , die sich eine Klasse aus HTMLElement
. Da es als bewährte Methode angesehen wird, die Klasse Ihrer Komponente nach dem Komponenten-Tag selbst zu benennen, wäre es hilfreich, eine Hilfsfunktion zu schreiben, mit der sich alle Ihre Komponenten registrieren könnten. Hier ist also diese Funktion:
function registerComponent(componentClass) {
const componentName = upperCamelCaseToSnakeCase(componentClass.name);
customElements.define(componentName, componentClass);
}
Alles was Sie tun müssen ist:
registerComponent(YourComponent);
Das ist schön, weil es weniger fehleranfällig ist, als das Komponenten-Tag selbst zu schreiben. Zum Abschluss ist dies die upperCamelCaseToSnakeCase()
Funktion:
// 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
undclass.name
geben Sie den Klassennamen in ES6 zurück.