Sử dụng super
Thuộc phần Lập trình hướng đối tượng trong hành trình JavaScript của Coddy. Bài học 37 trên 56.
Khi ghi đè một phương thức, bạn vẫn có thể truy cập phiên bản gốc của lớp cha bằng cách dùng super.methodName(). Nhờ vậy, bạn có thể mở rộng hoặc chỉnh sửa hành vi của lớp cha thay vì thay thế hoàn toàn.
Tạo một lớp cha có một phương thức:
class Animal {
makeSound() {
return "Generic animal sound";
}
}Tạo một lớp con kế thừa từ lớp cha:
class Dog extends Animal {
makeSound() {
// Gọi phương thức (method) của lớp cha trước
const parentSound = super.makeSound();
// Sau đó mở rộng thêm chức năng
return `${parentSound}, but also Woof!`;
}
}Tạo một đối tượng thuộc lớp con:
const myDog = new Dog();
console.log(myDog.makeSound());
// Đầu ra: "Generic animal sound, but also Woof!"Từ khóa super cho phép bạn gọi các phương thức của lớp cha, đồng thời thêm chức năng riêng trong lớp con.
Thử thách
Bạn được cung cấp một lớp Shape có phương thức calculateArea() và một lớp Rectangle kế thừa từ lớp đó. Nhiệm vụ của bạn là ghi đè phương thức calculateArea() trong Rectangle bằng cách dùng super.
Nhiệm vụ của bạn là hoàn thành phương thức calculateArea() trong lớp Rectangle để:
- Gọi phương thức
calculateArea()của lớp cha bằngsupervà lưu kết quả - Tính diện tích thực tế của hình chữ nhật:
width × height - Trả về một chuỗi kết hợp: thông báo của lớp cha + diện tích hình chữ nhật. Ví dụ:
Calculating area... Rectangle area: 50
Tự làm thử
import { Shape } from './shapes.js';
import { Rectangle } from './shapes.js';
// Code kiểm tra, không chỉnh sửa
const rectangle = new Rectangle(5, 10);
console.log(rectangle.calculateArea()); // Kết quả mong đợi: "Calculating area... Rectangle area: 50"
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Đối tượng và từ khóa this
Ôn nhanh: đối tượngThêm phương thức vào đối tượngTìm hiểu từ khóa thisHàm khởi tạoTừ khóa newThử thách ôn tập7Kế thừa và từ khóa extends
Kế thừaQuan hệ "là một"Từ khóa extendsPhương thức super()Kế thừa thuộc tính và phương thứcThử thách ôn tập13Kết hợp hay kế thừa
Quan hệ “có một” và “là một”Những hạn chế của kế thừa nhiều tầngXây dựng đối tượng5Đóng gói và quyền truy cập
Đóng góiTrường công khai và trường riêng tưPhương thức riêng tưThử thách ôn tập8Tổ chức code OOP
Tổ chức các lớp thành module11Dự án: Trình hiển thị hình dạng
Thiết lập: lớp Hình dạng và xuấtKế thừa lớp Hình trònGhi đè và phương thức diện tíchBộ đếm hình dạng tĩnh6Dự án: Tài khoản ngân hàng đơn giản
Lớp BankAccountGửi tiền và rút tiềnSố dư dưới dạng thuộc tính riêng tư9Phương thức và thuộc tính tĩnh
Cấp lớp và cấp instanceThuộc tính tĩnhPhương thức tiện ích tĩnhThử thách ôn tậpTự luyện tập: Trình biên dịch JavaScript online