Trong TypeScript, bạn có thể gọi hàm constructor của lớp cơ sở từ lớp con bằng cách sử dụng từ khóa super()
. Từ khóa này cho phép bạn khởi tạo các thuộc tính hoặc thực hiện các tác vụ cần thiết trong constructor của lớp cơ sở trước khi thực hiện bất kỳ logic nào trong constructor của lớp con.
Cú pháp gọi hàm constructor của lớp cơ sở
Dưới đây là hướng dẫn chi tiết về cách thực hiện việc này.
Ví dụ cụ thể
1. Định nghĩa lớp cơ sở
Trước tiên, bạn định nghĩa một lớp cơ sở với một constructor và một số thuộc tính:
class Animal {
name: string;
constructor(name: string) {
this.name = name;
console.log(`Animal created: ${this.name}`);
}
makeSound() {
console.log(`${this.name} makes a sound.`);
}
}
2. Định nghĩa lớp con
Khi bạn định nghĩa lớp con, bạn sẽ gọi super()
trong constructor của lớp con để khởi tạo constructor của lớp cơ sở. Đây là một ví dụ về lớp Dog
kế thừa từ lớp Animal
:
class Dog extends Animal {
breed: string;
constructor(name: string, breed: string) {
super(name); // Gọi constructor của lớp cơ sở
this.breed = breed;
console.log(`Dog created: ${this.name}, Breed: ${this.breed}`);
}
bark() {
console.log(`${this.name} barks.`);
}
}
3. Sử dụng lớp
Khi bạn tạo một đối tượng của lớp Dog
, constructor của lớp Animal
sẽ được gọi trước:
const myDog = new Dog("Buddy", "Golden Retriever");
// Đầu ra:
// Animal created: Buddy
// Dog created: Buddy, Breed: Golden Retriever
Giải thích
- Kế thừa: Lớp
Dog
kế thừa từ lớp Animal
thông qua từ khóa extends
. Điều này có nghĩa là Dog
sẽ có tất cả các thuộc tính và phương thức của Animal
.
- Gọi super(): Trong constructor của
Dog
, super(name)
được gọi trước bất kỳ thao tác nào khác. Điều này là bắt buộc vì bạn không thể truy cập this
trước khi gọi super()
trong một lớp con.
- Khởi tạo thuộc tính: Sau khi gọi
super()
, bạn có thể khởi tạo các thuộc tính riêng của lớp con, như breed
.
Kết luận
Để gọi hàm constructor của lớp cơ sở từ lớp con trong TypeScript, bạn chỉ cần sử dụng từ khóa super()
trong constructor của lớp con. Việc này không chỉ khởi tạo các thuộc tính của lớp cơ sở mà còn giúp duy trì mối quan hệ kế thừa giữa các lớp. Điều này giúp tổ chức mã nguồn tốt hơn và tăng khả năng tái sử dụng mã.