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

  1. 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.
  2. 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.
  3. 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ã.