Sobes.tech
Junior

JavaScriptda merosxo'rlik qanday ishlashini tushuntiring.

sobes.tech AI

AIdan javob

JavaScriptda meroslash prototiplar asosida quriladi. Har bir obyektda ichki xususiyat [[Prototype]] (bu __proto__ yoki Object.getPrototypeOf() orqali kirish mumkin) mavjud bo‘lib, u boshqa obyekti ko‘rsatadi.

Obyektning xususiyati yoki metodiga kirishga harakat qilganda, agar u obyektda to‘g‘ridan-to‘g‘ri topilmasa, JavaScript uni [[Prototype]] da qidiradi, so‘ngra prototipning [[Prototype]] da va shunday qilib prototiplar zanjiri bo‘ylab, oxiriga ( Object.prototype) yetguncha, uning [[Prototype]] null ga teng.

Bu prototipga asoslangan merosdir.

ECMAScript 2015 (ES6) dagi sinflar prototip merosiga sintaktik shakar bo‘lib, ular prototiplar bilan ishlash va obyektlar hierarxiyalarini yaratish uchun yanada odatiy sintaksis taqdim etadi.

ES6 dan oldingi prototip merosini ishlatish misoli:

// Ota konstruktor
function Animal(name) {
  this.name = name;
}

// Ota metod prototipda
Animal.prototype.sayHi = function() {
  console.log(`Salom, men ${this.name}`);
};

// O‘g‘il konstruktor
function Dog(name, breed) {
  // Ota konstruktorini chaqirish
  Animal.call(this, name);
  this.breed = breed;
}

// O‘g‘il prototipini ota prototipiga sozlash
// Dog konstruktoriga havola saqlash
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

// O‘g‘il metodini qo‘shish
Dog.prototype.bark = function() {
  console.log("Hov-hov!");
};

// O‘g‘il nusxasi
const myDog = new Dog("Boby", "Labrador");

// Ota va o‘g‘il metodlaridan foydalanish
myDog.sayHi(); // Chiqish: Salom, men Boby
myDog.bark();  // Chiqish: Hov-hov!

ES6 sinflaridan foydalanish misoli:

// Ota sinfi
class Animal {
  constructor(name) {
    this.name = name;
  }

  sayHi() {
    console.log(`Salom, men ${this.name}`);
  }
}

// O‘g‘il sinfi, Animal dan meros olgan
class Dog extends Animal {
  constructor(name, breed) {
    // Ota konstruktorini chaqirish
    super(name);
    this.breed = breed;
  }

  bark() {
    console.log("Hov-hov!");
  }
}

// O‘g‘il sinfidan nusxa olish
const myDog = new Dog("Rex", "Germaniya cho‘poni");

// Ota va o‘g‘il metodlaridan foydalanish
myDog.sayHi(); // Chiqish: Salom, men Rex
myDog.bark();  // Chiqish: Hov-hov!

JavaScriptda merosning asosiy nuqtalari:

  • Prototiplar: Har bir obyektda prototip mavjud.
  • Prototiplar zanjiri: Xususiyat yoki metod qidirilishi yuqoriga, prototiplar bo‘ylab davom etadi.
  • [[Prototype]]: Ichki xususiyat, prototipga ishora qiladi.
  • __proto__: [[Prototype]] ga kirish uchun eski, ammo keng tarqalgan usul.
  • Object.getPrototypeOf(): [[Prototype]] ga kirish uchun tavsiya etilgan usul.
  • Konstruktorlar va prototype: ES6 dan oldin obyektlar yaratish va ularning prototiplarini belgilash uchun ishlatilgan.
  • Sinflar (ES6): class, extends, super kalit so‘zlari yordamida prototip merosiga sintaktik shakar.