"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
-
Biz yana bitta matn qo’shdik (ta’kidlangan), hozir qanday
alertko’rsatilmoqda?function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype = {}; alert( rabbit.eats ); // ? -
…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 ); // ? -
Bu kabi (bitta satr o’rni o’zgartirildi)?
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete rabbit.eats; alert( rabbit.eats ); // ? -
Oxirgi variant:
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete Rabbit.prototype.eats; alert( rabbit.eats ); // ?
Javoblar:
-
true.Rabbit.prototypega topshirish yangi obyektlar uchun[[Prototype]]ni o’rnatadi, ammo bu mavjudlariga ta’sir qilmaydi. -
false.Obyektlar havola orqali tayinlanadi.
Rabbit.prototypeobyekti takrorlanmagan, u hali ham bitta obyektgaRabbit.prototypevarabbitning[[Prototype]]tomonidan havola qilinadi.Shunday qilib, uning mazmunini bitta havola orqali o’zgartirganda, ikkinchisi orqali ko’rinadi.
-
true.Barcha
o'chirishoperatsiyalari to’g’ridan-to’g’ri obyektga qo’llaniladi. Bu yerdarabbit.eatsfaylinirabbitdan olib tashlashga harakat qiladi, lekin unda yo’q. Shunday qilib, operatsiya hech qanday ta’sir qilmaydi. -
undefined.Prototipdan
eatsxususiyati o’chirildi, endi u mavjud emas.