JavaScript xử lý tính kế thừa trong các đối tượng như thế nào?
Nếu bạn đã từng làm việc với các ngôn ngữ lập trình hướng đối tượng khác như Java hoặc C++, thì bạn đã quen với khái niệm kế thừa. Show Trong mô hình lập trình này, một lớp là một kế hoạch chi tiết để tạo các đối tượng. Nếu bạn muốn một lớp mới sử dụng lại chức năng của một lớp hiện có, bạn có thể tạo một lớp mới mở rộng lớp hiện có. Đây được gọi là kế thừa cổ điển JavaScript không sử dụng kế thừa cổ điển. Thay vào đó, nó sử dụng kế thừa nguyên mẫu Trong kế thừa nguyên mẫu, một đối tượng “kế thừa” các thuộc tính từ một đối tượng khác thông qua liên kết nguyên mẫu Kế thừa nguyên mẫu JavaScript và __proto__Hãy lấy một ví dụ để làm rõ khái niệm Sau đây định nghĩa một đối tượng 6
Trong ví dụ này, đối tượng 6 có một thuộc tính và một phương thức
Theo mặc định, công cụ JavaScript cung cấp cho bạn hàm 0 tích hợp và một đối tượng ẩn danh có thể được tham chiếu bởi 1 Lưu ý rằng hình tròn đại diện cho một chức năng trong khi hình vuông đại diện cho một đối tượng Đối tượng người có liên kết đến đối tượng ẩn danh được tham chiếu bởi hàm 0. 3 đại diện cho liên kết Điều đó có nghĩa là đối tượng 6 có thể gọi bất kỳ phương thức nào được xác định trong đối tượng ẩn danh được tham chiếu bởi 1. Ví dụ: phần sau đây trình bày cách gọi phương thức 6 thông qua đối tượng 6
đầu ra
8 là biểu diễn chuỗi mặc định của một đối tượng Khi bạn gọi phương thức 6 qua 6, công cụ JavaScript không thể tìm thấy nó trên đối tượng 6. Do đó, công cụ JavaScript tuân theo chuỗi nguyên mẫu và tìm kiếm phương thức trong đối tượng 1 Vì công cụ JavaScript có thể tìm thấy phương thức 6 trong đối tượng 1, nên nó sẽ thực thi phương thức 6 Để truy cập nguyên mẫu của đối tượng 6, bạn có thể sử dụng thuộc tính 47 như sau 4 Sau đây cho thấy các tham chiếu 48 và 1 cùng một đối tượng 8 Phần sau định nghĩa đối tượng 80 có phương thức 81 1 Giống như đối tượng 6, 83 tham chiếu đến 1 như minh họa trong hình dưới đây Nếu bạn muốn đối tượng 80 truy cập tất cả các phương thức và thuộc tính của đối tượng 6, bạn có thể đặt nguyên mẫu của đối tượng 80 thành đối tượng 6 như thế này 9 Lưu ý rằng bạn không bao giờ được sử dụng thuộc tính 47 trong mã sản xuất. Vui lòng chỉ sử dụng nó cho mục đích trình diễn Bây giờ, đối tượng 80 có thể truy cập thuộc tính 8 và phương thức 12 từ đối tượng 6 thông qua chuỗi nguyên mẫu 5 đầu ra 6 Khi bạn gọi phương thức 12 trên đối tượng 80, công cụ JavaScript sẽ tìm thấy nó trong đối tượng 80 trước Vì công cụ JavaScript không thể tìm thấy phương thức trong đối tượng 80, nên nó sẽ theo chuỗi nguyên mẫu và tìm kiếm phương thức trong đối tượng 6. Bởi vì công cụ JavaScript có thể tìm thấy phương thức 12 trong đối tượng 6, nên nó sẽ thực thi phương thức Trong JavaScript, chúng tôi nói rằng đối tượng 80 kế thừa các phương thức và thuộc tính của đối tượng 6. Và kiểu thừa kế này được gọi là thừa kế nguyên mẫu Một cách tiêu chuẩn để triển khai kế thừa nguyên mẫu trong ES5ES5 đã cung cấp một cách tiêu chuẩn để làm việc với kế thừa nguyên mẫu bằng cách sử dụng phương thức 93 Lưu ý rằng bây giờ bạn nên sử dụng các từ khóa ES6 94 và 95 mới hơn để thực hiện kế thừa. Nó đơn giản hơn nhiều Phương thức 93 tạo một đối tượng mới và sử dụng một đối tượng hiện có làm nguyên mẫu của đối tượng mới JavaScript hỗ trợ kế thừa như thế nào?Khi nói đến tính kế thừa, JavaScript chỉ có một cấu trúc. các đối tượng. Mỗi đối tượng có một thuộc tính riêng (được gọi là [[Prototype]] ) duy trì liên kết đến một đối tượng khác được gọi là nguyên mẫu . Đối tượng nguyên mẫu đó có nguyên mẫu riêng của nó, v.v. cho đến khi đạt được đối tượng có nguyên mẫu không có giá trị.
Loại cơ chế kế thừa nào được sử dụng trong JavaScript?Không giống như các ngôn ngữ hướng đối tượng sử dụng cơ chế kế thừa dựa trên lớp, hệ thống kế thừa của JavaScript là nguyên mẫu . Bài đăng này sẽ chỉ cho bạn cách đạt được tính kế thừa trong JavaScript thông qua khái niệm về các đối tượng có thể kế thừa các thuộc tính từ các đối tượng khác.
Mảng có kế thừa từ đối tượng trong JavaScript không?Ví dụ: cả Mảng và Ngày đều kế thừa từ Đối tượng , vì vậy các phiên bản của chúng có các phương thức từ Đối tượng. nguyên mẫu. Nhưng Mảng. [[Prototype]] không tham chiếu Object , vì vậy, chẳng hạn, không có Array. |