JavaScript prototip va meros zanjiri
Klasslar darsida metodlar bir joyda saqlanishini ko’rgan edik. Endi shu mexanizmning o’ziga qaraymiz — u JavaScript’ni boshqa tillardan ajratib turadi.
Xossa qayerdan topiladi
toString va hasOwnProperty ni biz yozmadik, lekin ular bor. Chunki obyekt
xossani o’zida topa olmasa, prototipiga qaraydi.
Zanjirni ko’rish
Zanjir null bilan tugaydi — bu izlashning oxiri.
Massivning zanjiri
map massivning o’zida emas — Array.prototype da. Barcha massivlar shu
bitta funksiyani baham ko’radi.
Object.create — prototipni qo’lda belgilash
it da faqat nom bor, ovoz esa prototipdan olindi.
Prototipni o’zgartirish — zanjir jonli
xayr obyekt yaratilgandan keyin qo’shildi, lekin baribir ko’rindi —
zanjir nusxa emas, jonli bog’lanish.
Xossa berish — zanjirga tegmaydi
O’zlashtirish har doim obyektning o’zida yangi xossa yaratadi. Prototipdagi qiymat “to’siladi”, lekin o’zgarmaydi — o’chirilganda yana ko’rinadi.
O’ziniki yoki merosmi
Farq muhim: in va for...in zanjirni ham ko’radi, Object.keys va
Object.hasOwn — faqat obyektning o’zini.
Klass — prototip ustidagi qobiq
Klass yozuvi yangi mexanizm emas, mavjudining qulay shakli:
Ko’rinib turibdi: ism obyektda, salom esa Talaba.prototype da.
Konstruktor funksiya — eski uslub
Klasslardan oldin shunday yozilardi:
Natija klass bilan bir xil. Eski kodni o’qishda bu shakl uchraydi.
Meros zanjiri
Zanjir: t → Talaba.prototype → Inson.prototype → Object.prototype →
null. Meros shu zanjirni quradi.
Prototipsiz obyekt
Zanjirsiz obyekt — sof lug’at. Kalitlar toString kabi merosiy nomlar bilan
to’qnashmaydi.
Amaliy mashq
- Obyekt yaratib,
Object.getPrototypeOfbilan zanjirni ko’ring; Object.createbilan prototipli obyekt yasang;- prototipga metod qo’shib, mavjud obyektda ko’ringanini tasdiqlang;
- prototipdagi xossani obyektda “to’sib”, keyin
deleteqiling; in,Object.hasOwnvaObject.keysnatijasini solishtiring;- klass yozib, metod
prototypeda ekanini tekshiring.
Qisqacha xulosa
- Har obyekt prototip bilan bog’langan; xossa u yerdan izlanadi.
- Zanjir
nullbilan tugaydi. Object.create(asos)prototipni qo’lda belgilaydi.- O’zlashtirish doim obyektning o’zida yangi xossa yaratadi.
in/for...inzanjirni ko’radi;Object.keys/hasOwn— faqat o’zini.- Klass — prototip mexanizmi ustidagi qulay yozuv.
Keyingi darsda event loop — JavaScript navbat tizimi.