⊗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šuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць