Masalah Sifat Persendirian dalam Pewarisan OOP dalam JavaScript
Hakikat bahawa sifat persendirian tidak diwarisi boleh membawa kepada masalah yang tidak dijangka. Mari kita lihat contoh. Katakan kita mempunyai kelas induk berikut dengan sifat persendirian:
javascriptclass User {
#age;
setAge(age) {
this.#age = age;
}
getAge() {
return this.#age;
}
}
Katakan dalam kelas anak, kita ingin membuat kaedah yang akan menambah usia sebanyak satu. Namun, percubaan untuk mengubah sifat persendirian induk akan menyebabkan ralat:
javascriptclass Student extends User {
incAge() {
this.#age++; // ralat
}
}
Ralat akan hilang jika dalam kelas anak
diisytiharkan sifat persendirian #age:
javascriptclass Student extends User {
#age;
incAge() {
this.#age++;
}
}
Di sinilah kita terjebak! Sebenarnya, kita telah menghasilkan dua sifat persendirian: satu dalam induk dan satu dalam anak. Dan mereka beroperasi sepenuhnya secara berasingan. Ini bermakna kaedah induk akan mengubah sifat mereka sendiri, dan kaedah anak - sifat mereka sendiri.
Masalah ini sebenarnya mempunyai penyelesaian. Hanya perlu memanipulasi sifat persendirian induk melalui kaedah induk tersebut. Mari kita tulis semula kod kami menurut ini:
javascriptclass Student extends User {
incAge() {
let age = this.getAge();
age++;
this.setAge(age);
}
}
Boleh dipermudahkan:
javascriptclass Student extends User {
incAge() {
this.setAge(++this.getAge());
}
}
Dalam kod berikut, dalam kelas anak kaedah induk digantikan. Betulkan masalah dalam kod ini:
javascriptclass User {
#name;
setName(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
class Employee extends User {
setName(name) {
if (name.length > 0) {
this.#name = name;
}
}
}