darsga qaytish

"Prototip" ni o'zgartirish

Quyidagi kodda biz new Rabbit ni yaratamiz va keyin uning prototipini o’zgartirishga harakat qilamiz.

Boshida bizda ushbu kod mavjud:

function Rabbit() {}
Rabbit.prototype = {
  eats: true,
};

let rabbit = new Rabbit();

alert(rabbit.eats); // true
  1. Biz yana bitta matn qo’shdik (ta’kidlangan), hozir qanday alert ko’rsatilmoqda?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype = {};
    
    alert( rabbit.eats ); // ?
  2. …Va agar kod shunga o’xshash bo’lsa (bitta satr o’rni o’zgartirildi)?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype.eats = false;
    
    alert( rabbit.eats ); // ?
  3. Bu kabi (bitta satr o’rni o’zgartirildi)?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete rabbit.eats;
    
    alert( rabbit.eats ); // ?
  4. Oxirgi variant:

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete Rabbit.prototype.eats;
    
    alert( rabbit.eats ); // ?

Javoblar:

  1. true.

    Rabbit.prototype ga topshirish yangi obyektlar uchun [[Prototype]] ni o’rnatadi, ammo bu mavjudlariga ta’sir qilmaydi.

  2. false.

    Obyektlar havola orqali tayinlanadi. Rabbit.prototype obyekti takrorlanmagan, u hali ham bitta obyektga Rabbit.prototype va rabbit ning [[Prototype]] tomonidan havola qilinadi.

    Shunday qilib, uning mazmunini bitta havola orqali o’zgartirganda, ikkinchisi orqali ko’rinadi.

  3. true.

    Barcha o'chirish operatsiyalari to’g’ridan-to’g’ri obyektga qo’llaniladi. Bu yerda rabbit.eats faylini rabbit dan olib tashlashga harakat qiladi, lekin unda yo’q. Shunday qilib, operatsiya hech qanday ta’sir qilmaydi.

  4. undefined.

    Prototipdan eats xususiyati o’chirildi, endi u mavjud emas.