ZmÄna âprototypeâ
V následujÃcÃm kódu vytvoÅÃme new KrálÃk a pak se pokusÃme zmÄnit jeho prototyp.
Na zaÄátku máme tento kód:
function KrálÃk() {}
KrálÃk.prototype = {
žere: true
};
let králÃk = new KrálÃk();
alert( králÃk.žere ); // true
-
PÅidáme dalšà Åádek (zvýraznÄný). Co nynà zobrazÃ
alert?function KrálÃk() {} KrálÃk.prototype = { žere: true }; let králÃk = new KrálÃk(); KrálÃk.prototype = {}; alert( králÃk.žere ); // ? -
â¦A když kód vypadá takto (jeden Åádek zmÄnÄn)?
function KrálÃk() {} KrálÃk.prototype = { žere: true }; let králÃk = new KrálÃk(); KrálÃk.prototype.žere = false; alert( králÃk.žere ); // ? -
A takto (jeden Åádek zmÄnÄn)?
function KrálÃk() {} KrálÃk.prototype = { žere: true }; let králÃk = new KrálÃk(); delete králÃk.žere; alert( králÃk.žere ); // ? -
Poslednà varianta:
function KrálÃk() {} KrálÃk.prototype = { žere: true }; let králÃk = new KrálÃk(); delete KrálÃk.prototype.žere; alert( králÃk.žere ); // ?
OdpovÄdi:
-
true.PÅiÅazenà do
KrálÃk.prototypenastavÃ[[Prototype]]pro nové objekty, ale neovlivnà již existujÃcÃ. -
false.Objekty jsou pÅiÅazovány odkazem. Objekt z
KrálÃk.prototypenenà duplikován, ale je to stále jediný objekt, na který se odkazujà jakKrálÃk.prototype, tak[[Prototype]]objektukrálÃk.Když tedy zmÄnÃme jeho obsah skrz jeden odkaz, uvidÃme to i druhým odkazem.
-
true.Všechny operace
deletese aplikujà pÅÃmo na objekt. Zde sedelete králÃk.žerepokusà odstranit vlastnostžerez objektukrálÃk, ale ten ji neobsahuje. Operace tedy nemá žádný úÄinek. -
undefined.Vlastnost
žereje smazána z prototypu a nadále neexistuje.