Отримання назви класу безпосередньо з класу
Попередні відповіді пояснювали, що це someClassInstance.constructor.name
працює чудово, але якщо вам потрібно програмно перетворити ім’я класу в рядок і не хочете створювати екземпляр лише для цього, пам’ятайте, що:
typeof YourClass === "function"
Оскільки кожна функція має name
властивість, ще один приємний спосіб отримати рядок з назвою вашого класу - це просто зробити:
YourClass.name
Далі - хороший приклад, чому це корисно.
Завантаження веб-компонентів
Як навчає нас документація MDN , так ви завантажуєте веб-компонент:
customElements.define("your-component", YourComponent);
Звідки YourComponent
походить клас HTMLElement
. Оскільки вважається хорошою практикою називати клас вашого компонента за самим тегом компонента, було б непогано написати допоміжну функцію, яку всі ваші компоненти могли використовувати для реєстрації. Отже ось ця функція:
function registerComponent(componentClass) {
const componentName = upperCamelCaseToSnakeCase(componentClass.name);
customElements.define(componentName, componentClass);
}
Отже, все, що вам потрібно зробити:
registerComponent(YourComponent);
Що приємно, оскільки він менш схильний до помилок, ніж самостійно писати тег компонентів. Для завершення цього upperCamelCaseToSnakeCase()
функція:
// 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
іclass.name
поверніть ім'я класу у відповідному ES6.