⊗jsOpIhPPP 36 of 60 menu

პრივატული თვისებების მემკვიდრეობის პრობლემა OOP-ში 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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა