Mendapatkan nama kelas langsung dari kelas
Jawaban sebelumnya menjelaskan bahwa itu someClassInstance.constructor.name
berfungsi dengan baik, tetapi jika Anda secara terprogram mengubah nama kelas menjadi string dan tidak ingin membuat turunan hanya untuk itu, ingat bahwa:
typeof YourClass === "function"
Dan, karena setiap fungsi memiliki name
properti, cara lain yang bagus untuk mendapatkan string dengan nama kelas Anda adalah dengan hanya melakukan:
YourClass.name
Berikut ini adalah contoh bagus mengapa ini berguna.
Memuat komponen web
Seperti yang diajarkan oleh dokumentasi MDN kepada kami, ini adalah cara Anda memuat komponen web:
customElements.define("your-component", YourComponent);
Di mana YourComponent
kelas membentang dari HTMLElement
. Karena dianggap praktik yang baik untuk memberi nama kelas komponen Anda setelah tag komponen itu sendiri, alangkah baiknya menulis fungsi pembantu yang dapat digunakan semua komponen Anda untuk mendaftar sendiri. Jadi, inilah fungsi itu:
function registerComponent(componentClass) {
const componentName = upperCamelCaseToSnakeCase(componentClass.name);
customElements.define(componentName, componentClass);
}
Jadi yang perlu Anda lakukan adalah:
registerComponent(YourComponent);
Yang bagus karena lebih sedikit kesalahan daripada menulis tag komponen sendiri. Untuk menyelesaikannya, ini adalah upperCamelCaseToSnakeCase()
fungsinya:
// 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
danclass.name
kembalikan nama kelas dalam ES6 yang tepat.