"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
alert
ko’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.prototype
ga topshirish yangi obyektlar uchun[[Prototype]]
ni o’rnatadi, ammo bu mavjudlariga ta’sir qilmaydi. -
false
.Obyektlar havola orqali tayinlanadi.
Rabbit.prototype
obyekti takrorlanmagan, u hali ham bitta obyektgaRabbit.prototype
varabbit
ning[[Prototype]]
tomonidan havola qilinadi.Shunday qilib, uning mazmunini bitta havola orqali o’zgartirganda, ikkinchisi orqali ko’rinadi.
-
true
.Barcha
o'chirish
operatsiyalari to’g’ridan-to’g’ri obyektga qo’llaniladi. Bu yerdarabbit.eats
faylinirabbit
dan olib tashlashga harakat qiladi, lekin unda yo’q. Shunday qilib, operatsiya hech qanday ta’sir qilmaydi. -
undefined
.Prototipdan
eats
xususiyati o’chirildi, endi u mavjud emas.