Obtendo o nome da turma diretamente da turma
As respostas anteriores explicaram que someClassInstance.constructor.namefunciona muito bem, mas se você precisar converter programaticamente o nome da classe em uma string e não desejar criar uma instância apenas para isso, lembre-se:
typeof YourClass === "function"
E, como toda função tem uma namepropriedade, outra maneira agradável de obter uma string com o nome da sua classe é:
YourClass.name
O que se segue é um bom exemplo de por que isso é útil.
Carregando componentes da Web
Como a documentação do MDN nos ensina, é assim que você carrega um componente da web:
customElements.define("your-component", YourComponent);
Onde YourComponent uma classe se estende HTMLElement. Como é uma boa prática nomear a classe do seu componente após a própria tag do componente, seria bom escrever uma função auxiliar que todos os seus componentes pudessem usar para se registrar. Então aqui está essa função:
function registerComponent(componentClass) {
const componentName = upperCamelCaseToSnakeCase(componentClass.name);
customElements.define(componentName, componentClass);
}
Então, tudo que você precisa fazer é:
registerComponent(YourComponent);
O que é legal porque é menos propenso a erros do que você mesmo escrever a tag do componente. Para finalizar, esta é a upperCamelCaseToSnakeCase()função:
// 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.nameeclass.nameretorne o nome da classe no ES6 adequado.