Klasslar

Tug'ma klasslarni kengaytirish

Array, Map, Error kabi tug'ma (built-in) klasslarni ham extends orqali kengaytirish mumkin. Bu bizga ularning imkoniyatlarini saqlab qolgan holda o'z metodlarimizni qo'shish imkonini beradi.

Array'ni kengaytirish

Aytaylik, bizga oddiy massivga o'xshash, lekin qo'shimcha metodlarga ega bo'lgan tur kerak. Masalan, isEmpty() metodini qo'shamiz:

builtin-array.js
// natija shu yerda chiqadi

E'tibor bering โ€” PowerArray odatdagi massivning barcha metodlariga (push, filter, length va h.k.) ega. Bundan tashqari, o'zimizning isEmpty()miz ham bor.

Qiziq narsa: yangi obyekt turi

Yuqoridagi misolda diqqatga sazovor jihat bor: filter, map kabi tug'ma metodlar o'sha meros olgan turdagi yangi obyektlarni qaytaradi, oddiy Array emas! Ular ichki jihatdan obyektning constructor xossasidan foydalanadi:

builtin-species.js
// natija shu yerda chiqadi

Symbol.species

Agar biz filter, map kabi metodlar oddiy Array qaytarishini xohlasak, maxsus statik getter Symbol.speciesni belgilaymiz. U qanday konstruktor ishlatilishini boshqaradi:

builtin-species2.js
// natija shu yerda chiqadi
Symbol.species โ€” bu Map, Set kabi boshqa tug'ma kolleksiyalar uchun ham ishlaydi. U "ichki metodlar qanday obyekt yaratsin" degan savolga javob beradi.

Error'ni kengaytirish

Amaliyotda eng ko'p kengaytiriladigan tug'ma klasslardan biri โ€” Error. Bu bizga o'ziga xos xato turlarini yaratish imkonini beradi:

builtin-error.js
// natija shu yerda chiqadi

Bu yerda super(message) ota Error konstruktorini chaqirib, messageni o'rnatadi. So'ng biz this.nameni o'zgartirib, xatoni aniq turlab olamiz. err instanceof Error ham true โ€” ya'ni bizning xatomiz haqiqiy Error.

O'z xato klasslaringizni yaratish katta loyihalarda juda foydali โ€” turli xato turlarini catch blokida instanceof orqali ajratib, har biriga alohida munosabatda bo'lish mumkin.

Statik xossalar meros olinmasligiga eslatma

Muhim tafsilot: tug'ma klasslarni kengaytirganda oddiy metod va konstruktorlar meros olinadi, ammo tug'ma klasslarning ba'zi statik metodlari meros olinmaydi. Masalan, Array.isArray โ€” u Arrayning statik metodi bo'lib, meros olgan klassdan chaqirilganda ehtiyot bo'lish kerak.

builtin-static.js
// natija shu yerda chiqadi

Xulosa