Sobes.tech
Middle

JavaScriptda prototip merosxo'rligi nima?

sobes.tech AI

AIdan javob

JavaScriptda obyektlar o'z prototiplaridan xususiyatlar va metodlarni meros oladi. Har bir obyektning prototipi boshqa obyekt bo'lib, uning xususiyatlari va metodlari prototiplar zanjiri orqali mavjud.

Obyektning xususiyatiga kirish paytida, JavaScript avvalo uni to'g'ridan-to'g'ri obyektda qidiradi. Agar xususiyat topilmasa, qidiruv bu obyektning prototipida davom etadi, keyin prototipning prototipida va shunday davom etadi, xususiyat topilguncha yoki zanjir oxiriga (null) yetguncha.

Prototip meros olishi klassik merosdan (Java yoki C++ kabi) farq qiladi, bunda obyektlar ularning tuzilishi va xulq-atvorini tavsiflovchi klasslardan yaratiladi. JavaScriptda, ES6 bilan kiritilgan klasslar, prototip asosidagi meros ustida sintaktik shakar sifatida xizmat qiladi.

Asosiy jihatlar:

  • __proto__: Obyektning ichki xususiyati bo'lib, uning prototipiga ishora qiladi.
  • prototype: Konstruktorning (konstruktor sifatida ishlatiladigan funktsiya) xususiyati bo'lib, yaratilgan nusxalar uchun prototip bo'lib xizmat qiladigan obyektga ishora qiladi.
  • Object.getPrototypeOf(obj): Obyektning prototipini olish uchun standart usul.
  • Object.setPrototypeOf(obj, proto): Obyektning prototipini belgilash uchun standart usul.

Misol:

// Konstruktor funktsiya
function Animal(name) {
  this.name = name;
}

// Animal prototipiga metod qo'shish
Animal.prototype.sayHello = function() {
  console.log(`Salom, mening ismim ${this.name}`);
};

// Nusxa yaratish
const dog = new Animal("Buddy");

// Prototipdagi metodni chaqirish
dog.sayHello(); // Chiqish: Salom, mening ismim Buddy

// dog ning prototipi Animal.prototype
console.log(Object.getPrototypeOf(dog) === Animal.prototype); // true

// Animal.prototype ning prototipi Object.prototype
console.log(Object.getPrototypeOf(Animal.prototype) === Object.prototype); // true

// Prototip zanjirining oxiri null
console.log(Object.getPrototypeOf(Object.prototype) === null); // true

Klassik meros bilan taqqoslaganda (ES6 klasslaridan foydalanib):

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

  sayHello() {
    console.log(`Salom, mening ismim ${this.name}`);
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name); // Ota klassning konstruktorini chaqirish
    this.breed = breed;
  }

  bark() {
    console.log("Woof!");
  }
}

const buddy = new Dog("Buddy", "Golden Retriever");
buddy.sayHello(); // Chiqish: Salom, mening ismim Buddy (Animal'dan meros)
buddy.bark(); // Chiqish: Woof! (Dog metod)

// ES6 klasslar prototiplar ustida shakar
console.log(Object.getPrototypeOf(Dog) === Animal); // true (klass merosi)
console.log(Object.getPrototypeOf(Dog.prototype) === Animal.prototype); // true (metodlar merosi prototiplar orqali)
console.log(Object.getPrototypeOf(buddy) === Dog.prototype); // true (instansiya klass prototipidan meros oladi)

Prototip meros olishi JavaScriptda muhim tushunchadir va uning tushunilishi til bilan samarali ishlash uchun zarurdir.