Obyekt metodlari

Avvalroq muhokama qilinganidek, barcha JavaScript obyektlari (prototipsiz, aniq yaratilganlaridan tashqari) xossalarni Object.prototype'dan meros qilib oladi. Bu meros olingan xossalar asosan metodlardir va ular universal darajada mavjud bo'lgani uchun JavaScript dasturchilari uchun alohida qiziqish uyg'otadi. Masalan, biz hasOwnProperty() va propertyIsEnumerable() metodlarini allaqachon ko'rib chiqdik. (Shuningdek, Object konstruktorida mavjud bo'lgan Object.create() va Object.keys() kabi bir nechta statik funksiyalarni ham yoritib o'tdik.)

Ushbu bo'lim Object.prototype'da ta'riflangan, lekin boshqa, yanada ixtisoslashgan implementatsiyalar bilan almashtirilishi ko'zda tutilgan bir nechta universal obyekt metodlarini tushuntiradi. Keyingi bo'limlarda biz bu metodlarni bitta obyektda ta'riflashga doir misollarni ko'rsatamiz. 9-bobda esa, bu metodlarni butun bir obyektlar klassi uchun yanada umumiyroq tarzda qanday tayinlash mumkinligini o'rganasiz.

toString() metodi

toString() metodi hech qanday argument qabul qilmaydi; u o'zi chaqirilgan obyektning qiymatini biror tarzda ifodalovchi satrni qaytaradi. JavaScript obyektni satrga o'zgartirishi kerak bo'lgan har qanday holatda aynan shu metodni chaqiradi. Bu, masalan, siz + operatori yordamida satrni obyekt bilan birlashtirganingizda yoki obyektni satr kutadigan metodga uzatganingizda sodir bo'ladi.

Standart toString() metodi unchalik ko'p ma'lumot bermaydi (garchi u, §14.4.3-bo'limda ko'rib chiqadiganimizdek, obyektning klassini aniqlash uchun foydali bo'lsa ham). Masalan, quyidagi kod qatori shunchaki "[object Object]" satriga baholanadi:

Bu standart metod unchalik ham foydali ma'lumot ko'rsatmagani uchun, ko'plab klasslar toString()'ning o'zlariga xos versiyalarini ta'riflaydilar. Masalan, massiv satrga o'zgartirilganda, siz massiv elementlarining ro'yxatini olasiz (har bir elementning o'zi ham satrga o'zgartirilgan holda). Funksiya satrga o'zgartirilganda esa, siz funksiyaning manba kodini olasiz. Siz o'zingizning shaxsiy toString() metodingizni quyidagicha yaratishingiz mumkin:

toLocaleString() metodi

Asosiy toString() metodiga qo'shimcha ravishda, barcha obyektlar toLocaleString() metodiga ham ega. Bu metodning vazifasi obyektning mahalliylashtirilgan (localized) satrli ifodasini qaytarishdir.

Object tomonidan ta'riflangan standart toLocaleString() metodi o'z-o'zidan hech qanday mahalliylashtirishni amalga oshirmaydi: u shunchaki toString()'ni chaqiradi va o'sha qiymatni qaytaradi. Date va Number klasslari esa toLocaleString()'ning sonlar, sanalar va vaqtlarni mahalliy qoidalarga muvofiq formatlashga harakat qiladigan moslashtirilgan versiyalarini ta'riflaydi. Array klassi toString() kabi ishlaydigan toLocaleString() metodini ta'riflaydi, faqat u massiv elementlarini ularning toString() metodlarini emas, balki toLocaleString() metodlarini chaqirish orqali formatlaydi.

Siz ham point obyekti bilan xuddi shunday qilishingiz mumkin:

§11.7-bo'limda keltirib o'tiladigan xalqarolashtirish (internationalization) klasslari toLocaleString() metodini implementatsiya qilishda foydali bo'lishi mumkin.

valueOf() metodi

valueOf() metodi toString() metodiga juda o'xshaydi, lekin u JavaScript obyektni satrdan boshqa biror primitiv tipga — odatda, songa — o'zgartirishi kerak bo'lganda chaqiriladi. Agar obyekt primitiv qiymat talab qilinadigan kontekstda ishlatilsa, JavaScript bu metodni avtomatik ravishda chaqiradi.

Standart valueOf() metodi hech qanday diqqatga sazovor ish qilmaydi, lekin ba'zi ichki o'rnatilgan klasslar o'zlarining shaxsiy valueOf() metodlarini ta'riflaydilar. Date klassi sanalarni sonlarga o'zgartirish uchun valueOf()'ni ta'riflaydi va bu Date obyektlarini < va > yordamida xronologik tarzda taqqoslash imkonini beradi.

Siz ham point obyekti bilan shunga o'xshash ish qilishingiz, ya'ni nuqtadan koordinata boshigacha bo'lgan masofani qaytaradigan valueOf() metodini ta'riflashingiz mumkin:

toJSON() metodi

Object.prototype aslida toJSON() metodini ta'riflamaydi, lekin JSON.stringify() metodi (§6.8-bo'limga qarang) o'ziga seriyalashtirish uchun uzatilgan har qanday obyektdan toJSON() metodini qidiradi. Agar seriyalashtirilishi kerak bo'lgan obyektda bu metod mavjud bo'lsa, u chaqiriladi va asl obyekt o'rniga uning qaytargan qiymati seriyalashtiriladi.

Date klassi (§11.4) sananing seriyalashtiriladigan satrli ifodasini qaytaradigan toJSON() metodini ta'riflaydi. Biz ham o'zimizning Point obyektimiz uchun xuddi shunday qilishimiz mumkin: