⊗jsOpIhPPP 36 of 60 menu

Problema proprietăților private la moștenire în OOP în JavaScript

Faptul că proprietățile private nu sunt moștenite, poate duce la o problemă neașteptată. Să ne uităm la un exemplu. Să presupunem că avem următoarea clasă părinte cu o proprietate privată:

class User { #age; setAge(age) { this.#age = age; } getAge() { return this.#age; } }

Să presupunem că în clasa derivată am decis să creăm o metodă care va incrementa vârsta cu unu. Însă, încercarea de a modifica proprietatea privată a părintelui va duce la o eroare:

class Student extends User { incAge() { this.#age++; // eroare } }

Eroarea va dispărea dacă în clasa derivată declarăm proprietatea privată #age:

class Student extends User { #age; incAge() { this.#age++; } }

Aici ne așteaptă capcana! De fapt, am creat două proprietăți private: una în părinte și una în derivată. Și ele funcționează complet independent. Aceasta înseamnă că metodele părintelui vor modifica propria lor proprietate, iar metodele derivatei - propriile lor.

Această problemă are de fapt o soluție. Pur și simplu trebuie să manipulăm proprietățile private ale părintelui prin metodele acestui părinte. Să rescriem codul nostru în conformitate cu aceasta:

class Student extends User { incAge() { let age = this.getAge(); age++; this.setAge(age); } }

Putem simplifica:

class Student extends User { incAge() { this.setAge(++this.getAge()); } }

În următorul cod în clasa derivată este redefinită metoda părintelui. Corectați problemele din acest cod:

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; } } }
Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge