⊗jsOpIhPPP 36 of 60 menu

JavaScript-da OOPda Maxsus Xususiyatlarni Meros Qilib Olish Muammosi

Maxsus xususiyatlarning meros qilinmasligi kutilmagan muammolarga olib kelishi mumkin. Keling, buni misolda ko'rib chiqaylik. Faraz qilaylik, bizda quyidagi ota-sinf maxsus xususiyatga ega:

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

Faraz qilaylik, voris sinfda biz yoshni bittaga oshiradigan metod yaratmoqchimiz. Biroq, ota-sinfning maxsus xususiyatini o'zgartirishga urinish xatolikka olib keladi:

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

Xatolik, agar voris sinfda #age maxsus xususiyatini e'lon qilsak, yo'qoladi:

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

Mana bizni kutayotgan tuzoq! Aslida biz ikkita maxsus xususiyat yaratdik: biri ota-sinfda, ikkinchisi voris sinfda. Va ular butunlay mustaqil ishlaydi. Bu shuni anglatadiki, ota-sinf metodlari o'z xususiyatini, voris sinf metodlari esa o'zini o'zgartiradi.

Bu muammo aslida yechimga ega. Shunchaki ota-sinfning maxsus xususiyatlari bilan o'sha ota-sinfning metodlari orqali ishlash kerak. Keling, kodimizni qayta yozamiz shunga muvofiq:

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

Soddalashtirish mumkin:

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

Quyidagi kodda voris sinfda ota-sinf metodi qayta belgilanadi. Ushbu koddagi muammolarni tuzating:

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; } } }
Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish