Hướng dẫn javascript static property inheritance - kế thừa thuộc tính tĩnh javascript
Kể từ ES6, JavaScript thích hỗ trợ cho các lớp và chức năng tĩnh gần giống với các hàm tĩnh trong các ngôn ngữ hướng đối tượng khác. Thật không may, JavaScript thiếu hỗ trợ cho các thuộc tính tĩnh và các giải pháp được đề xuất trên Google không tính đến kế thừa. Tôi gặp phải vấn đề này khi thực hiện một tính năng Mongoose mới đòi hỏi một khái niệm mạnh mẽ hơn về các thuộc tính tĩnh. Cụ thể, tôi cần các thuộc tính tĩnh hỗ trợ kế thừa thông qua việc cài đặt Phương pháp tĩnh và kế thừaGiả sử bạn có một lớp ES6 đơn giản với phương pháp tĩnh.
Bạn có thể sử dụng 0.
Bạn cũng có thể sử dụng các getters và setter tĩnh để đặt thuộc tính tĩnh trên lớp 1.
Thật không may, mô hình này có hành vi không mong muốn khi bạn phân lớp 1. Nếu bạn đặt 3 trên một lớp con, nó sẽ đặt 3 cho lớp 1 và tất cả các lớp con khác.
Vấn đề trở nên tồi tệ hơn nếu tài sản của bạn là một mảng hoặc một đối tượng. Do sự kế thừa nguyên mẫu, nếu 3 là một mảng, mọi lớp con sẽ có một tham chiếu đến cùng một bản sao của mảng như hình dưới đây.
Vì vậy, JavaScript hỗ trợ các getters và setters tĩnh, nhưng sử dụng chúng với các đối tượng hoặc mảng là một bước chân. Hóa ra bạn có thể làm điều đó với một chút trợ giúp từ chức năng 7 tích hợp của JavaScript.Tính chất tĩnh với kế thừaÝ tưởng chính là một lớp JavaScript chỉ là một đối tượng khác, vì vậy bạn có thể phân biệt giữa các thuộc tính riêng và các thuộc tính được kế thừa.
Mẫu này gọn gàng với các lớp, nhưng nó cũng hoạt động với kế thừa JavaScript trước ES6. Điều này rất quan trọng vì Mongoose vẫn sử dụng kế thừa kiểu Pre-ES6. Nhìn nhận lại, chúng ta nên chuyển đổi sớm hơn, nhưng tính năng này là lần đầu tiên chúng ta thấy một lợi thế rõ ràng khi sử dụng các lớp ES6 và kế thừa chỉ khi đặt chức năng ____77.
Tiến lênCác lớp ES6 có lợi thế lớn so với trường cũ 9 vì extends bản sao trên các thuộc tính và chức năng tĩnh. Với một chút công việc sử dụng 1, bạn có thể tạo các getters và setter tĩnh xử lý chính xác kế thừa. Hãy rất cẩn thận với các thuộc tính tĩnh trong JavaScript: extends vẫn sử dụng kế thừa nguyên mẫu dưới mui xe. Điều đó có nghĩa là các đối tượng và mảng tĩnh được chia sẻ giữa tất cả các lớp con trừ khi bạn sử dụng mẫu 7 từ bài viết này.Tìm thấy một lỗi đánh máy hoặc lỗi? Mở ra một yêu cầu kéo! Bài đăng này có sẵn dưới dạng Markdown trên & nbsp; github |