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:
class 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:
class 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 đó:
class 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');
}
}
}
Cho đoạn mã sau:
class 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.