Thừa kế lớp

Frontend SELF VI
Mức độ , Bài học
Có sẵn

7.1 Cơ bản về thừa kế

Thừa kế lớp trong JavaScript cho phép tạo các lớp mới dựa trên các lớp đã tồn tại, sử dụng lại và mở rộng chức năng của chúng. Đây là một khía cạnh quan trọng của lập trình hướng đối tượng, cho phép tạo ra các hệ thống phân cấp lớp và quản lý hành vi của đối tượng.

Để thừa kế lớp, sử dụng từ khóa extends. Lớp kế thừa từ lớp khác được gọi là lớp dẫn xuất (subclass), và lớp được thừa kế được gọi là lớp cơ sở (superclass).

Ví dụ:

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
    
  

Giải thích:

  • Lớp Animal là lớp cơ sở với constructor và phương thức speak()
  • Lớp Dog kế thừa Animal và ghi đè phương thức speak()
  • Thể hiện dog của lớp Dog sử dụng phương thức speak() đã bị ghi đè

7.2 Từ khóa super

Từ khóa super được sử dụng để gọi constructor hoặc phương thức của lớp cơ sở từ lớp dẫn xuất.

1. Gọi constructor của lớp cơ sở

Lớp dẫn xuất phải gọi constructor của lớp cơ sở sử dụng super() trước khi sử dụng this.

Ví dụ:

Constructor Dog gọi super(name) để khởi tạo thuộc tính name của lớp cơ sở Animal.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        constructor(name, breed) {
          super(name);
          this.breed = breed;
        }

        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex', 'Labrador');
      console.log(dog.name); // "Rex"
      console.log(dog.breed); // "Labrador"
      dog.speak(); // "Rex barks."
    
  

2. Gọi phương thức của lớp cơ sở

Phương thức của lớp cơ sở có thể được gọi từ lớp dẫn xuất sử dụng super.

Ví dụ:

Phương thức speak() của lớp Dog gọi phương thức speak() của lớp cơ sở Animal sử dụng super.speak(), sau đó thực hiện logic riêng của mình.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          super.speak(); // Gọi phương thức của lớp cơ sở
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak();

      // "Rex makes a noise."
      // "Rex barks."
    
  

7.3 Thừa kế và ghi đè phương thức

Thừa kế cho phép các lớp dẫn xuất ghi đè phương thức của lớp cơ sở. Điều này cho phép thay đổi hoặc mở rộng chức năng của các phương thức.

Ví dụ:

Phương thức speak() của lớp Dog ghi đè phương thức speak() của lớp cơ sở Animal, cung cấp cài đặt riêng của mình.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const animal = new Animal('Generic Animal');
      animal.speak(); // "Generic Animal makes a noise."

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
    
  

7.4 Thừa kế và phương thức bổ sung

Lớp dẫn xuất có thể thêm các phương thức mới không tồn tại trong lớp cơ sở.

Ví dụ:

Lớp Dog thêm một phương thức mới fetch(), không tồn tại trong lớp cơ sở Animal.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }

        fetch() {
          console.log(`${this.name} is fetching.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
      dog.fetch(); // "Rex is fetching."
    
  

7.5 Kiểm tra thừa kế

Để kiểm tra thừa kế, có thể sử dụng toán tử instanceof và phương thức isPrototypeOf().

Ví dụ:

Toán tử instanceof kiểm tra xem một đối tượng có phải là một thực thể của lớp hay không. Phương thức isPrototypeOf() kiểm tra xem một prototyp có phải là một phần của chuỗi prototype của đối tượng khác hay không.

JavaScript
    
      console.log(dog instanceof Dog); // true
      console.log(dog instanceof Animal); // true
      console.log(Animal.prototype.isPrototypeOf(Dog.prototype)); // true
    
  
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION