JavaScript Prototip Chain'ni Tushunish
JavaScript-da prototip zanjiri qanday ishlaydi, uning ahamiyati va tili obyektga asoslangan dasturlashda qanday ta'sir qilishi
So'nggi yangilanish: 2024-12-12JavaScript Prototip Zanjirini Tushunish
Kirish
JavaScript-da merosxo'rlik prototip asosida amalga oshiriladi, bu Java yoki C# kabi tillardagi sinf asosidagi merosxo'rlikdan sezilarli darajada farq qiladi. Prototip zanjirini tushunish JavaScript-ni mukammal o'rganish uchun muhimdir, chunki u tilda ob'ektlar va metodlarning qanday ishlashining asosini tashkil etadi.
Prototip Nima?
Prototip - bu boshqa ob'ektlar unga xos bo'lgan xususiyatlar va metodlarni meros oladigan ob'ekt. JavaScript-da har bir ob'ektning prototip ob'ektiga ichki havola bor. Ushbu havolaga eskirgan __proto__
xossasi yoki tavsiya etilgan Object.getPrototypeOf()
metodi orqali kirish mumkin.
Agar ob'ektda biror xususiyat yoki metod topilmasa, JavaScript mexanizmi uni ob'ektning prototipidan izlaydi. Agar u hali ham topilmasa, qidiruv prototip zanjiri bo'ylab davom etadi va oxirida Object.prototype
ga yetguncha, keyin esa xususiyat topilmasa undefined
qaytariladi.
Asosiy Tushunchalar
Prototip Zanjiri
Prototip zanjiri - bu bog'langan ob'ektlar qatori. U siz bilan ishlayotgan ob'ektdan boshlanadi va __proto__
havolalarini yuqori prototiplarga qarab kuzatadi, oxirida Object.prototype
ga yetadi. Agar kerakli xususiyat yoki metod topilmasa, undefined
qaytariladi.
Prototip Xosselari
__proto__
: Eskirgan, lekin hali ham keng tarqalgan. U ob'ektning prototipiga havola beradi.Object.getPrototypeOf(obj)
: Ob'ektning prototipiga kirish uchun zamonaviy va tavsiya etilgan usul.Object.prototype
: Prototip zanjirining tepasi, alohida tartibda o'rnatilmagan bo'lsa, barcha ob'ektlar tomonidan bo'lishib olinadi.
Konstruktor Funksiyalari
JavaScript-da konstruktor funksiyasi new
kalit so'zi bilan ob'ektlar yaratadi. Konstruktor funksiyalari prototiplar orqali ko'p ob'ektlarni umumiy xatti-harakatlar bilan yaratishning qulay usulini taqdim etadi.
Misol:
function Animal(type) {
this.type = type;
}
Animal.prototype.speak = function() {
console.log(`${this.type} ovoz chiqaradi.`);
};
const dog = new Animal('It');
dog.speak(); // "It ovoz chiqaradi."
Bu yerda speak
metodi Animal.prototype
ga qo'shilgan. Animal
konstruktori bilan yaratilgan har qanday ob'ekt prototip zanjiri orqali speak
ga kirisha oladi.
Merosxo'rlik Qanday Ishlaydi
Ob'ekt Yaratish va Bog'lash
new
bilan konstruktor funksiya chaqirilganda, JavaScript quyidagilarni bajaradi:
- Yangi ob'ekt yaratadi.
- Yangi ob'ektning prototipini (
__proto__
) konstruktorprototype
xossasiga bog'laydi. - Konstruktor funksiyasini yangi ob'ekt kontekstida bajaradi.
Prototiplarga Metodlar Qo'shish
Prototipda aniqlangan metodlar konstruktor bilan yaratilgan barcha ob'ektlar tomonidan bo'lishib olinadi. Bu xotira nuqtai nazaridan samarali, chunki metodlar har bir ob'ektda takrorlanmaydi.
Misol:
function Bird(name) {
this.name = name;
}
Bird.prototype.fly = function() {
console.log(`${this.name} uchmoqda.`);
};
const parrot = new Bird('Kakarakov');
parrot.fly(); // "Kakarakov uchmoqda."
Sinflar va Prototiplar
ES6 class
sintaksisini taqdim etgan bo'lsa-da, bu aslida mavjud prototip asosidagi merosxo'rlik tizimining sintaktik qandaydir qulayligi hisoblanadi. JavaScript-dagi sinflar tubida funksiya bo'lib, ularning metodlari prototipga qo'shiladi.
Misol:
class Vehicle {
constructor(type) {
this.type = type;
}
move() {
console.log(`${this.type} harakatlanmoqda.`);
}
}
const car = new Vehicle('Mashina');
car.move(); // "Mashina harakatlanmoqda."
Tubida:
Vehicle
funksiya hisoblanadi.move
metodiVehicle.prototype
ga qo'shiladi.
instanceof
Operatori
instanceof
operatori ob'ektning prototip zanjirida konstruktor funksiyasining prototip xossasining borligini tekshiradi.
Misol:
console.log(car instanceof Vehicle); // true
console.log(car instanceof Object); // true
Bu car
ob'ektining prototip zanjiri Vehicle.prototype
va Object.prototype
ni o'z ichiga oladi.
Amaliy Qo'llanma va Xatoliklar
Umumiy Qo'llanma Holatlari
- Metodlarni Bo'lishish: Prototiplar bir xil konstruktor bilan yaratilgan ob'ektlar uchun metodlarni bo'lishib olishga imkon beradi.
- Dinamik Xatti-Harakatlar: Ob'ektlar yaratilgandan keyin ham prototiplarga xususiyatlar yoki metodlar qo'shish mumkin.
Xatoliklar
- Prototiplarni Qayta Yozish: Ob'ektning prototipini almashtirish merosxo'rlikni buzishi mumkin.
Bird.prototype = { walk: function() {} }; const eagle = new Bird('Burgut'); eagle.fly(); // Xato: fly funksiya emas
__proto__
vaprototype
o'rtasidagi farqni tushunmaslik: Esda tutingki,__proto__
ob'ektning haqiqiy prototipidan iborat,prototype
esa konstruktor funksiyalarining xossasidir.
Xulosa
- Prototip zanjiri JavaScript merosxo'rligining asosiy tushunchasi hisoblanadi.
- Ob'ektlar xususiyatlar va metodlarni prototip havolasi orqali meros oladi.
- Konstruktor funksiyalari va sinflar metodlarni samarali bo'lishib olish uchun prototiplardan foydalanadi.
- Prototip zanjirini tushunish JavaScript-ning xatti-harakatini tushunishga va nosozliklarni tuzatishni osonlashtiradi.
Qo'shimcha Manbalar
Keyinchalik prototiplar va prototip chain'ga chuqurroq kirish uchun quyidagi manbalarni ko'rib chiqing: