⊗jsOpIhPPP 36 of 60 menu

Проблема на приватните својства при наследувањето во ООП во JavaScript

Toа што приватните својства не се наследуваат, може да доведе до неочекуван проблем. Да погледнеме на пример. Нека имаме следниот родителски клас со приватно својство:

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; } } }
Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј