instanceof tekshiruvi
instanceof operatori obyekt ma'lum bir klassga tegishli yoki yo'qligini tekshiradi. U merosni ham hisobga oladi, shuning uchun ko'p hollarda juda foydali.
instanceof operatori
Sintaksis oddiy: obj instanceof Class. Agar obj Classga (yoki undan meros olgan klassga) tegishli bo'lsa, true qaytadi:
Oxirgi misolda arr instanceof Object ham true, chunki Array prototipik jihatdan Objectdan meros oladi.
instanceof meros bilan
instanceofning kuchi shundaki, u prototip zanjiri bo'ylab qaraydi. Ya'ni meros olgan obyekt ham ota klassning "nusxasi" hisoblanadi:
U qanday ishlaydi? Prototip zanjiri
Aslida obj instanceof Class quyidagi algoritm bo'yicha ishlaydi: u objning prototip zanjirini birma-bir tekshiradi va zanjirda Class.prototype uchraydimi yoki yo'qmi ko'radi.
obj.__proto__===Class.prototype? Ha bo'lsatrue;- Yo'q bo'lsa,
obj.__proto__.__proto__ni tekshiradi; - Zanjir oxirigacha (
nullga yetguncha) davom etadi.
instanceof merosni to'g'ri hisobga oladi: u prototip zanjirining istalgan bosqichida Class.prototypeni topsa yetarli.Symbol.hasInstance
instanceofning xatti-harakatini sozlash mumkin. Agar klassda maxsus statik metod Symbol.hasInstance bo'lsa, instanceof aynan uni chaqiradi:
Bu yerda obj Animaldan meros olmagan bo'lsa ham, uning canEat xossasi true bo'lgani uchun instanceof true qaytardi. Ya'ni biz "tegishlilik" mezonini o'zimiz belgiladik.
Symbol.hasInstance juda kuchli, ammo kamdan-kam ishlatiladi. Uni faqat maxsus mantiq zarur bo'lganda ishlatish tavsiya etiladi, aks holda kod chalkash bo'lib qoladi.Object.prototype.toString bilan tur aniqlash
typeof operatori cheklangan โ u massiv, sana yoki nullni ajrata olmaydi. instanceof esa klasslar bilan ishlaydi. Yana bir kuchli usul โ Object.prototype.toString orqali obyektning aniq turini olish:
Ko'rib turganingizdek, Object.prototype.toString typeofdan aniqroq: u Array, Null kabi turlarni ham to'g'ri aniqlaydi. Faqat qavs ichidagi turni ajratib olish uchun kichik kod yozamiz:
Object.prototype.toString.call(value).slice(8, -1) โ bu "tur aniqlash"ning eng ishonchli usuli. U typeofdan aniqroq va tug'ma turlar bilan mukammal ishlaydi.Xulosa
obj instanceof Classโ obyekt klassga tegishli (yoki undan meros olganini) tekshiradi;- U prototip zanjiri bo'ylab qidirib,
Class.prototypeni topsatrueqaytaradi; - Merosni to'g'ri hisobga oladi:
rabbit instanceof Animalhamtrue; Symbol.hasInstanceorqaliinstanceofmantiqini sozlash mumkin;Object.prototype.toString.call(...)โtypeofdan aniqroq tur aniqlash usuli.