Gần đây tôi đã suy nghĩ khá nhiều về cách thực hiện OOP trong JS, đặc biệt là khi nói đến việc đóng gói và kế thừa, gần đây.
Theo Crockford, cổ điển có hại vì mới () và cả nguyên mẫu và cổ điển đều bị hạn chế do việc sử dụng constructor.prototype của chúng có nghĩa là bạn không thể sử dụng các bao đóng để đóng gói.
Gần đây, tôi đã xem xét một vài điểm sau đây về đóng gói:
Đóng gói giết chết hiệu suất . Nó làm cho bạn thêm các hàm vào MACHI đối tượng thành viên thay vì vào nguyên mẫu, bởi vì các phương thức của mỗi đối tượng có các cách đóng khác nhau (mỗi đối tượng có các thành viên riêng khác nhau).
Encapsulation buộc cách giải quyết "var that = this" xấu xí này, để có được các hàm trợ giúp riêng có quyền truy cập vào thể hiện mà chúng được đính kèm. Hoặc là hoặc chắc chắn rằng bạn gọi chúng bằng privateFunction.apply (cái này) mọi lúc.
Có cách giải quyết cho một trong hai vấn đề tôi đã đề cập không? Nếu không, bạn vẫn coi đóng gói là xứng đáng?
Sidenote: Mẫu chức năng mà Crockford mô tả thậm chí không cho phép bạn thêm các phương thức công khai chỉ chạm vào các thành viên công cộng, vì nó hoàn toàn bỏ qua việc sử dụng new () và constructor.prototype. Sẽ không phải là một cách tiếp cận hỗn hợp trong đó bạn sử dụng kế thừa cổ điển và new (), mà còn gọi Super.apply (điều này, đối số) để khởi tạo các thành viên riêng và phương thức đặc quyền, có vượt trội không?
O(1)
với O(n)
với n = 2
...