Tatizo la Sifa za Kibinafsi Wakati wa Kurithi katika OOP katika JavaScript
Ukweli kwamba sifa za kibinafsi hazirithiwi, inaweza kusababisha tatizo lisilotarajiwa. Tuangalie kwa mfano. Tuchukulie tuna kitabu kizazi mzazi chenye sifa ya kibinafsi ifuatayo:
class User {
#age;
setAge(age) {
this.#age = age;
}
getAge() {
return this.#age;
}
}
Tuchukulie katika kitabu kizazi mtoto tuliamua kutengeneza njia, ambayo itaongeza umwa kwa moja. Hata hivyo, jaribio la kubadilisha sifa ya kibinafsi ya mzazi litasababisha kosa:
class Student extends User {
incAge() {
this.#age++; // kosa
}
}
Kosa litatoweka, ikiwa katika kitabu kizazi mtoto
utatangaza sifa ya kibinafsi #age:
class Student extends User {
#age;
incAge() {
this.#age++;
}
}
Hapa ndipo tunakabiliwa na mtego! Kweli sisi tulizaa sifa mbili za kibinafsi: moja kwenye mzazi na moja kwenye mtoto. Na zinafanya kazi kikamilifu kwa kujitegemea. Hii inamaanisha, kwamba njia za mzazi zitabadilisha sifa zao, na njia za mtoto - zao.
Tatizo hili kweli lina ufumbuzi. Ni lazima tuwasilishe sifa za kibinafsi za mzazi kupitia njia za mzazi huyo. Tuandike tena msimbo wetu kulingana na hili:
class Student extends User {
incAge() {
let age = this.getAge();
age++;
this.setAge(age);
}
}
Inaweza kurahisishwa:
class Student extends User {
incAge() {
this.setAge(++this.getAge());
}
}
Katika msimbo ufuatao katika kitabu kizazi mtoto njia ya mzazi inafafanuliwa upya. Rekebisha matatizo kwenye msimbo huu:
class User {
#name;
setName(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
class Employee extends User {
setName(name) {
if (name.length > 0) {
this.#name = name;
}
}
}