Lấy tên lớp trực tiếp từ lớp
Các câu trả lời trước đã giải thích rằng nó someClassInstance.constructor.name
hoạt động tốt, nhưng nếu bạn cần lập trình chuyển đổi tên lớp thành một chuỗi và không muốn tạo một cá thể chỉ cho điều đó, hãy nhớ rằng:
typeof YourClass === "function"
Và, vì mọi hàm đều có một thuộc name
tính, một cách hay khác để có được một chuỗi với tên lớp của bạn là chỉ cần làm:
YourClass.name
Điều gì sau đây là một ví dụ tốt về lý do tại sao điều này là hữu ích.
Đang tải các thành phần web
Như tài liệu MDN dạy chúng tôi, đây là cách bạn tải một thành phần web:
customElements.define("your-component", YourComponent);
Trong trường hợp YourComponent
được một lớp học kéo dài từ HTMLElement
. Vì nó được coi là cách thực hành tốt để đặt tên lớp của thành phần của bạn theo chính thẻ thành phần, nên sẽ rất tốt khi viết một hàm trợ giúp mà tất cả các thành phần của bạn có thể sử dụng để tự đăng ký. Vì vậy, đây là chức năng:
function registerComponent(componentClass) {
const componentName = upperCamelCaseToSnakeCase(componentClass.name);
customElements.define(componentName, componentClass);
}
Vì vậy, tất cả những gì bạn cần làm là:
registerComponent(YourComponent);
Điều này là tốt vì nó ít bị lỗi hơn là tự viết thẻ thành phần. Để gói nó, đây là upperCamelCaseToSnakeCase()
chức năng:
// 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
vàclass.name
trả lại tên lớp trong ES6 thích hợp.