Hướng dẫn override trong javascript
Tính kế thừa của lớp là một cách để một lớp mở rộng từ một lớp khác. Show Vì vậy, chúng ta có thể tạo phương thức mới trên các đối tượng hiện có.
1. Từ khóa “extends” Chúng ta có lớp
Đây là cách chúng ta có thể biểu diễn đối tượng Và tôi muốn tạo ra một cái khác Vì thỏ là động vật, lớp Cú pháp để mở rộng một lớp khác là : Hãy tạo ra
Đối tượng của
lớp Trong nội bộ, từ khóa Chẳng hạn, để tìm phương thức
Như chúng ta có thể nhớ lại từ chương Native prototypes, JavaScript tự sử dụng tính
kế thừa nguyên mẫu cho các đối tượng. Ví dụ như Bất kỳ biểu thức nào cũng được cho phép Cú pháp class cho phép chỉ định không chỉ một lớp, mà bất kỳ biểu thức nào cũng đi sau từ khoá Ví dụ, một lệnh gọi hàm tạo lớp cha:
Ở đây Điều đó có thể hữu ích cho các mẫu lập trình nâng cao khi chúng ta sử dụng các hàm để tạo các lớp tùy thuộc vào nhiều điều kiện và có thể kế thừa từ chúng. 2. Ghi đè(Overriding) một phương thứcBây giờ chúng ta hãy tiến lên và ghi đè(Overriding) một phương thức. Theo mặc định, tất cả các phương thức không được chỉ định trong Nhưng nếu chúng ta chỉ định phương thức riêng của mình trong
Thông thường chúng ta không muốn thay thế hoàn toàn một phương thức cha, mà là xây dựng lại phương thức cha để điều chỉnh hoặc mở rộng hàm của nó. Chúng ta làm một cái gì đó trong phương thức của chúng ta, nhưng gọi phương thức cha trước / sau nó hoặc trong quy trình. Các lớp cung cấp từ khóa
Ví dụ, hãy để thỏ của chúng ta tự động khi dừng lại:
Bây giờ Hàm mũi tên không có Các hàm mũi tên không có Nếu được truy cập, nó được lấy từ hàm bên ngoài. Ví dụ:
Hàm
3. Overriding constructorVới các constructor, nó có một chút khó khăn. Cho đến bây giờ, Theo đặc tả , nếu một lớp mở rộng một
lớp khác và không có
Như chúng ta có thể thấy, về cơ bản nó gọi Bây giờ hãy thêm một hàm tạo tùy chỉnh của mình vào
Rất tiếc! Chúng ta đã có một lỗi. Bây giờ chúng ta không thể tạo ra thỏ. Có chuyện gì? Câu trả lời ngắn gọn
là: các hàm xây dựng(constructors) trong kế thừa các lớp phải gọi …Nhưng tại sao? Những gì đang xảy ra ở đây? Thật vậy, yêu cầu có vẻ lạ. Tất nhiên, có một lời giải thích. Hãy đi vào chi tiết, vì vậy bạn sẽ thực sự hiểu những gì đang diễn ra. Trong JavaScript, có một sự khác biệt giữa hàm xây dựng(constructors) của một lớp kế thừa (cái gọi là hàm tạo của lớp dẫn xuất hay hàm tạo của lớp con) và các hàm khác. Một
constructor dẫn xuất có một thuộc tính nội bộ đặc biệt Nhãn đó ảnh hưởng đến hành vi của nó với
Vì vậy, một hàm tạo có nguồn gốc phải gọi Để hàm tạo
4. Super: nội bộ(internals), [[HomeObject]]Thông tin nâng cao Nếu bạn đang học bài hướng dẫn này lần đầu tiên – phần này có thể bị bỏ qua. Đó là về các cơ chế nội bộ đằng sau sự kế thừa
và Chúng ta hãy đi sâu hơn một chút` của Đầu tiên phải nói, từ tất cả những gì chúng ta đã học cho đến bây giờ, nó không thể làm cho Vâng, thực sự, chúng ta hãy tự hỏi, làm thế nào nó nên hoạt động về mặt kỹ thuật? Khi một phương thức đối tượng chạy, nó nhận được đối tượng hiện tại là Nhiệm vụ có vẻ đơn giản, nhưng không phải. Công cụ biết đối tượng Hãy chứng minh vấn đề. Không có các lớp, sử dụng các đối tượng đơn giản vì mục đích đơn giản. Bạn có thể bỏ qua phần này và đi đến phần phụ Trong ví dụ dưới đây ,
Tại dòng Và trong đoạn code trên nó thực sự hoạt động như dự định: chúng ta có chính xác
Bây giờ hãy thêm một đối tượng vào chuỗi. Chúng ta sẽ thấy mọi thứ vỡ như thế nào:
Code không hoạt động nữa! Chúng ta có thể thấy lỗi khi cố gắng gọi Nó có thể không rõ ràng, nhưng nếu chúng ta theo dõi lệnh gọi Vì vậy, trong cả hai dòng Đây là bức tranh về những gì xảy ra:
2. Sau đó, trong dòng
3. Vì vậy, bản thân Vấn đề không thể được giải quyết bằng cách sử dụng [[HomeObject]]Để cung cấp giải
pháp, JavaScript thêm một thuộc tính nội bộ đặc biệt cho các hàm : Khi một hàm được chỉ định là một phương thức lớp hoặc đối tượng, thuộc tính của nó Sau đó Chúng ta hãy xem cách nó hoạt động, đầu tiên với các đối tượng đơn giản:
Nó hoạt động như dự định, do 4.1. Các phương thức không phải là “miễn phí” để muốn làm gì thì làmNhư chúng ta đã biết trước đây, các phương thức nói chung là miễn phí, không bị ràng buộc với các đối tượng trong JavaScript. Vì vậy, chúng có thể được sao chép giữa các đối tượng và được gọi với một đối tượng khác Chính sự tồn tại
của Nơi duy nhất trong ngôn ngữ Đây là bản demo của một
Một lệnh gọi cho Lý do rất đơn giản:
Đây là sơ đồ của những gì xảy ra: 4.2. Phương thức, không phải là thuộc tính hàm
Sự khác biệt có thể không cần thiết đối với chúng ta, nhưng nó quan trọng đối với JavaScript. Trong ví dụ dưới đây, một cú pháp phi phương thức được sử dụng để so sánh.
5. Tóm lược
Cũng như vậy:
Full series tự học Javascript từ cơ bản tới nâng cao tại đây nha. Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng! Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you! |