クラスから直接クラス名を取得する
以前の答えはそれがsomeClassInstance.constructor.name
うまく機能することを説明しましたが、プログラムでクラス名を文字列に変換する必要があり、そのためのインスタンスを作成したくない場合は、次のことに注意してください:
typeof YourClass === "function"
また、すべての関数にはname
プロパティがあるため、クラス名を含む文字列を取得するもう1つの方法は、次のようにすることです。
YourClass.name
以下は、これが役立つ理由の良い例です。
Webコンポーネントの読み込み
MDNのドキュメントは、私たちを教え、これは、Webコンポーネントをロードする方法です。
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
返します。