Мушкилоти хусусиятҳои хусусӣ дар мероси ООП дар JavaScript
Он чи ки хусусиятҳои хусусӣ мерос бурда намешаванд, метавонад ба мушкилоти ногаҳонӣ оварда расонад. Биёед дар мисол бинем. Бигзор мо класси волидайнро бо хусусиятҳои хусусӣ дошта бошем:
class User {
#age;
setAge(age) {
this.#age = age;
}
getAge() {
return this.#age;
}
}
Бигзор дар класи фарзанд мо қарор додем, ки усуле созем, ки синро як воҳид зиёд мекунад. Аммо, кӯшиши тағйир додани хусусияти хусусии волидайн ба хато меорад:
class Student extends User {
incAge() {
this.#age++; // хато
}
}
Хато нест мешавад, агар дар класи фарзанд
хусусияти хусусии #age-ро эълон кунем:
class Student extends User {
#age;
incAge() {
this.#age++;
}
}
Дар ҳамин ҷост, ки мо ба туфуқ мерасем! Дар асл мо ду хусусияти хусусиро ба вуҷуд овардем: яке дар волидайн ва яке дар фарзанд. Ва онҳо комилан аз ҳам истиқлол кор мекунанд. Ин маънои онро дорад, ки усулҳои волидайн хусусияти худро тағйир медиҳанд, ва усулҳои фарзанд - хусусияти худро.
Ин мушкилот дар асл ҳал дорад. Танҳо бояд хусусиятҳои хусусии волидайнро тавассути усулҳои ҳамин волидайн идора кард. Биёед коди худро барҳам мувофиқи ин нависем:
class Student extends User {
incAge() {
let age = this.getAge();
age++;
this.setAge(age);
}
}
Метавонад сода карда шавад:
class Student extends User {
incAge() {
this.setAge(++this.getAge());
}
}
Дар коди зерин дар класи фарзанд усули волидайн аз нав таъриф дода мешавад. Мушкилотҳои ин кодро ислоҳ кунед:
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;
}
}
}