클래스에서 직접 클래스 이름 가져 오기
이전 답변 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에서 클래스 이름을 반환합니다.