Konstruktor, new operatori
Oddiy {...} sintaksisi bitta obyekt yaratishga qulay. Ammo bir-biriga o'xshash ko'plab obyektlarni โ masalan, ko'p foydalanuvchi, mahsulot yoki menyu bandini โ yaratish kerak bo'lganda, konstruktor funksiyalar va new operatori yordamga keladi.
Konstruktor funksiya
Konstruktor funksiya โ texnik jihatdan oddiy funksiya. Ammo uni boshqalardan ajratib turuvchi ikkita kelishuv (konvensiya) bor:
- Nomi bosh harf bilan boshlanadi (masalan,
User,Car); - U faqat new operatori bilan chaqirilishi kerak.
Bu yerda User funksiyasini new User("Jasur") ko'rinishida chaqirdik. Natijada tayyor, xossalari to'ldirilgan yangi obyekt qaytdi.
new nima qiladi? (4 qadam)
Funksiya new bilan chaqirilganda quyidagi qadamlar sodir bo'ladi:
- Yangi bo'sh obyekt yaratiladi va u
this'ga tayinlanadi; - Funksiya tanasi bajariladi. Odatda u
this'ni o'zgartiradi, unga yangi xossalar qo'shadi; thisqiymati qaytariladi (return);- Ya'ni
thisavtomatik return qilinadi โ buni o'zimiz yozishimiz shart emas.
Boshqacha aytganda, new User(...) quyidagiga o'xshash ishlaydi:
function User(name) {
// this = {}; (yashirin tarzda)
// this'ga xossalar qo'shiladi
this.name = name;
this.isAdmin = false;
// return this; (yashirin tarzda)
}
new User("Jasur") natijasi shunday obyekt bilan bir xil:let user = { name: "Jasur", isAdmin: false };Farqi โ konstruktor bilan biz istalgancha
new User(...) chaqirib, ko'p obyekt yarata olamiz.this โ hozirgi obyekt
Konstruktor ichida this โ hozir yaratilayotgan yangi obyektga ishora qiladi. Unga xossa va metod qo'shamiz:
Har bir new chaqiruvi mustaqil obyekt yaratadi: a va b bir-biridan mutlaqo ajralgan.
return konstruktor ichida
Odatda konstruktorlarda return yozilmaydi โ ular this'ni avtomatik qaytaradi. Ammo agar return mavjud bo'lsa, quyidagi qoida amal qiladi:
return <obyekt>โ o'sha obyekt qaytariladi (thiso'rniga);return <primitiv>yoki bo'shreturnโ e'tiborsiz qoldiriladi, baribirthisqaytadi.
new User = new User(). Ammo qavsni yozish yaxshi uslub hisoblanadi โ kod aniqroq bo'ladi.Konstruktorda metodlar
Konstruktorlar nafaqat xossa, balki butun mantiqni โ metodlarni ham o'z ichiga oladi. Bu yagona joyda "o'ramlangan" (encapsulated) obyektlar yaratishga imkon beradi:
new.target
Ilg'or va kamdan-kam ishlatiladigan sintaksis new.target funksiya ichida uning new bilan chaqirilgan-chaqirilmaganini tekshirishga imkon beradi:
- Oddiy chaqiruvda
new.targetโundefined; newbilan chaqirilsa โ funksiyaning o'ziga teng bo'ladi.
new.target deyarli kerak emas. Uni ba'zan funksiyani newsiz ham new bilan ham bir xil ishlashiga majburlash uchun ishlatishadi, lekin bu kod o'qilishini murakkablashtiradi.Xulosa
- Konstruktor funksiya โ bosh harf bilan nomlanuvchi va
newbilan chaqiriladigan oddiy funksiya; newyangi bo'sh obyekt yaratadi (this), funksiya tanasini bajaradi vathis'ni avtomatik qaytaradi;- Konstruktor ichida
thisโ yaratilayotgan yangi obyekt; return <obyekt>yozilsa o'sha obyekt qaytadi; primitiv return e'tiborsiz qoladi;new.targetchaqiruv turini tekshiradi, lekin kamdan-kam kerak.