JavaScriptda merosxo'r qanday ishlashini tushuntiring.
sobes.tech AI
AIdan javob
JavaScriptda meroslashish prototiplar orqali amalga oshiriladi. Har bir JavaScript obyekti ichki [[Prototype]] xususiyatiga ega bo'lib, u boshqa obyekti bilan bog'langan. Ob'ektning to'g'ridan-to'g'ri uning ustida bo'lmagan xususiyat yoki metodga kirishga harakat qilganimizda, JavaScript motori bu xususiyat yoki metodni ob'ektning prototipida qidiradi. Agar u topilmasa, qidiruv [[Prototype]] bog'lanishlari orqali hosil bo'lgan prototip zanjirida davom etadi va null ga (zanjir oxiri) yetguncha davom etadi.
Ikki asosiy meros olish mexanizmi mavjud:
-
Klassik prototip meros olish (ES5 va avvalgi): Konstruktor funksiyalar va ularning
prototypexususiyatidan foydalanishga asoslangan.// Konstruktor funksiyasi function Animal(name) { this.name = name; } // Prototipga metod qo'shish Animal.prototype.speak = function() { console.log(`${this.name} tovush chiqaradi.`); }; // Namuna yaratish const dog = new Animal('It'); // Prototipdan metodni chaqirish dog.speak(); // Chiqish: It tovush chiqaradi. // Cat ning prototipi Animal.prototype console.log(Object.getPrototypeOf(dog) === Animal.prototype); // true -
Klassga asoslangan meros olish (ES6 va undan keyingi):
classvaextendssintaksisidan foydalanadi, bu esa ichki ravishda prototiplar bilan ishlashda davom etadi.// Asosiy sinf class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} tovush chiqaradi.`); } } // Animal dan meros oluvchi subclass class Dog extends Animal { constructor(name, breeds) { super(name); // Ota sinf konstruktorini chaqirish this.breeds = breeds; } bark() { console.log(`${this.name} baqiradi.`); } } // Subclassning namunasini yaratish const myDog = new Dog('Bublik', ['Labrador', 'Collie']); // Animal va Dog metodlarini chaqirish myDog.speak(); // Chiqish: Bublik tovush chiqaradi. myDog.bark(); // Chiqish: Bublik baqiradi. // myDog ning prototipi Dog.prototype console.log(Object.getPrototypeOf(myDog) === Dog.prototype); // true // Dog.prototype ning prototipi Animal.prototype console.log(Object.getPrototypeOf(Dog.prototype) === Animal.prototype); // true
Asosiy tushunchalar:
-
Prototip zanjiri: Ob'ektlar orasidagi
[[Prototype]]orqali bog'lanish. -
__proto__(eski/standart bo'lmagan, ammo tushunishda foydali): Bu xususiyat orqali[[Prototype]]ga kirish mumkin. Ishlab chiqarishda foydalanish tavsiya etilmaydi. -
Object.getPrototypeOf(obj): Ob'ektning prototipini olish uchun standart usul. -
Object.setPrototypeOf(obj, proto): Ob'ektning prototipini o'zgartirish uchun standart usul (mavjud ob'ektlarning prototipini o'zgartirish tavsiya etilmaydi). -
instanceof: Ob'ektning ma'lum bir sinf yoki konstruktor funksiyasining nusxasi ekanligini tekshirish uchun ishlatiladi, uning prototip zanjiri orqali.console.log(myDog instanceof Dog); // true console.log(myDog instanceof Animal); // true console.log(myDog instanceof Object); // true (zanjir oxirida Object.prototype) -
super: Sinflarda ota sinf metodlarini yoki konstruktorini chaqirish uchun ishlatiladi.
Klassik va klassga asoslangan yondashuvlar o'rtasidagi farq: Sinflar prototip meros bilan ishlashni yanada tuzilgan va sintaktik jihatdan qulayroq qilish uchun taqdim etadi, boshqa dasturlash tillariga yaqinroq. Biroq, asosiy mexanizm o'zgarmas — prototiplar orqali meros olish.