รับชื่อคลาสโดยตรงจากคลาส
คำตอบก่อนหน้านี้อธิบายว่าใช้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 ที่เหมาะสม