Gọi phương thức ghi đè trong OOP trong JavaScript

Khi ghi đè, lớp con mất quyền truy cập vào phương thức đã bị ghi đè của lớp cha. Tuy nhiên, vẫn có thể truy cập vào nó. Điều này được thực hiện bằng từ khóa super, trỏ đến lớp cha.

Hãy xem một ví dụ khi chúng ta có thể cần truy cập đến phương thức của lớp cha. Giả sử chúng ta có lớp cha sau:

javascriptclass User {
  setName(name) {
    this.name = name;
  }
  getName() {
    return this.name;
  }
}

Giả sử trong lớp con chúng ta ghi đè phương thức của lớp cha:

javascriptclass Student extends User {
  setName(name) {
    if (name.length > 0) {
      this.name = name;
    } else {
      throw new Error('student name error');
    }
  }
}

Có thể thấy rằng, trong phương thức được ghi đè, khi điều kiện được thỏa mãn, về cơ bản mã của phương thức lớp cha được thực thi. Điều này dẫn đến việc trùng lặp mã không cần thiết.

Có thể loại bỏ điều này bằng cách gọi phương thức của lớp cha. Hãy làm điều đó:

javascriptclass Student extends User {
  setName(name) {
    if (name.length > 0) {
      super.setName(name); // phương thức của lớp cha
    } else {
      throw new Error('student name error');
    }
  }
}
Задание 1

Cho đoạn mã sau:

javascriptclass User {
  setAge(age) {
    if (age >= 0) {
      this.age = age;
    } else {
      throw new Error('need age more 0');
    }
  }
}
class Employee {
  setAge(age) {
    if (age <= 120) {
      if (age >= 0) {
        this.age = age;
      } else {
        throw new Error('need age more 0');
      }
    } else {
      throw new Error('need age less 120');
    }
  }
}

Trong lớp Employee, hãy sửa và đơn giản hóa setter tuổi bằng cách sử dụng phương thức gốc của lớp cha.