⊗jsOpIhPPP 36 of 60 menu

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