⊗jsOpIhPPP 36 of 60 menu

Yksityisominaisuuksien perinnän ongelma OOP:ssa JavaScriptissä

Se, että yksityisominaisuuksia ei periydy, voi johtaa odottamattomaan ongelmaan. Katsotaanpa esimerkkiä. Oletetaan, että meillä on seuraava yläluokka, jossa on yksityinen ominaisuus:

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

Oletetaan, että alaluokassa päätimme tehdä menetelmän, joka kasvattaa ikää yhdellä. Yläluokan yksityisen ominaisuuden muuttamisyritys kuitenkin aiheuttaa virheen:

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

Virhe katoaa, jos alaluokassa esitellään yksityinen ominaisuus #age:

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

Siinä meitä odottaakin ansa! Oikeastaan loimme kaksi yksityistä ominaisuutta: yksi yläluokassa ja yksi alaluokassa. Ja ne toimivat täysin riippumattomasti. Tämä tarkoittaa, että yläluokan menetelmät muuttavat omia ominaisuuksiaan, ja alaluokan menetelmät - omiaan.

Tämä ongelma on oikeastaan ratkaistavissa. Yksityisiä yläluokan ominaisuuksia täytyy vain hallita yläluokan menetelmien kautta. Kirjoitetaan koodimme uudelleen tämän mukaisesti:

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

Voidaan yksinkertaistaa:

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

Seuraavassa koodissa alaluokassa ylikirjoitetaan yläluokan menetelmä. Korjaa tämän koodin ongelmat:

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; } } }
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää