Terminologiya haqida bir oz ma'lumot
Konstruktor va prototip o'rtasidagi asosiy aloqa buzilguncha biz quyidagi rasmni kuzatishimiz mumkin:
make_me \u003d funktsiya (_name) {
ogohlantirish ("Men ishga tushirdim");
bu .name \u003d _name;
bu .show_name \u003d function () (ogohlantirish (bu .name);)
}
Make_me.prototype.set_name \u003d function (_name) (bu .name \u003d _name;)
bola \u003d yangi make_me ("Vasya");
Ogohlantirish (make_me.prototype typeof); // ob'ekt - funktsiya prototip xususiyatiga ega
ogohlantirish (typeof child.prototype); // aniqlanmagan - yaratilgan ob'ekt YO'Q prototip xususiyatiga ega
ogohlantirish (child.constructor.prototype \u003d\u003d\u003d make_me.prototype); // true - lekin ob'ektda konstruktor xususiyati mavjud bo'lib, u make_me konstruktor funktsiyasiga ishora qiladi, bu esa o'z navbatida prototip xususiyatiga ega
* Ushbu manba kodi ta'kidlash manbai bilan ta'kidlangan.
Ushbu mavzu bo'yicha ko'plab forumlarni o'qib chiqqandan so'ng, odamlar funktsiyalarning prototip xususiyatlarini va shu funktsiya bilan yaratilgan ob'ektning yashirin [] xususiyatlarini chalkashtirib yuborishda yuzaga keladigan asosiy muammolarni ko'rib chiqdim.
Ushbu xususiyatlarning ikkalasi ham bir xil ob'ektga havolalardir (prototip va konstruktor o'rtasidagi asosiy bog'lanish buzilmas ekan), ammo shunga qaramay, ular har xil nomlar bilan turli xil xususiyatlarga ega, ulardan biri dasturchi uchun mavjud, ikkinchisi esa yo'q.
Har doim aniq tushunish kerakki, agar biz konstruktorning prototipi haqida gapiradigan bo'lsak, demak bu har doim prototip xususiyati va agar yaratilgan ob'ekt prototipi haqida bo'lsa, demak bu yashirin xususiyatdir [].
Endi bilamizki, har bir ob'ekt yashirin prototip ma'lumotnomasiga ega va har bir prototip odatdagi ob'ektdir.
Hamdardroq o'quvchilar allaqachon rekursiya hidini sezishgan :)
Darhaqiqat, beri prototip - bu oddiy ob'ekt, keyin u, o'z navbatida, o'zining prototipiga havolaga ega va h.k. Prototip iyerarxiyasi shu tarzda amalga oshiriladi.
qush \u003d funktsiyasi () () // Bu qushlarning konstruktori
bird.prototype.cry \u003d function () (ogohlantirish ("Cree!");) // Qush qichqirishi mumkin
bird.prototype.fly \u003d function () (ogohlantirish ("Men uchaman!");) // va uchib keting
Duck \u003d funktsiya () ()
duck.prototype \u003d yangi qush ();
duck.prototype.cry \u003d function () (ogohlantirish ("Quack quack!");) // O'rdak boshqacha qichqiradi
duck.prototype.constructor \u003d o'rdak; // prototype.constructor xususiyatini o'rdakka o'rnatishga majburlang, chunki aks holda bu qushga tegishli bo'ladi
Billi \u003d yangi o'rdak (); // Billi bizning o'rdakimiz
billy.fly (); // Men uchaman! - Billi qush bo'lgani uchun uchishi mumkin
billy.cry (); // Quack quack! - Billi qichqiradi, chunki u o'rdak
* Ushbu manba kodi ta'kidlash manbai bilan ta'kidlangan.
Shunday qilib, har qanday ichki darajadagi ierarxiyani amalga oshirishingiz mumkin.
Do'stlaringiz bilan baham: |