ÐзменÑем "prototype"
Ркоде ниже Ð¼Ñ ÑоздаÑм нового кÑолика new Rabbit, а поÑом пÑÑаемÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÐµÐ³Ð¾ пÑоÑоÑип.
СнаÑала Ñ Ð½Ð°Ñ ÐµÑÑÑ Ñакой код:
function Rabbit() {}
Rabbit.prototype = {
eats: true
};
let rabbit = new Rabbit();
alert( rabbit.eats ); // true
-
Ðобавим Ð¾Ð´Ð½Ñ ÑÑÑоÑÐºÑ (вÑделеннÑÑ Ð² коде ниже). ЧÑо вÑзов
alertÐ¿Ð¾ÐºÐ°Ð¶ÐµÑ Ð½Ð°Ð¼ ÑейÑаÑ?function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype = {}; alert( rabbit.eats ); // ? -
â¦Ð еÑли код Ñакой (заменили Ð¾Ð´Ð½Ñ ÑÑÑоÑкÑ)?
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype.eats = false; alert( rabbit.eats ); // ? -
Ðли Ñакой (заменили Ð¾Ð´Ð½Ñ ÑÑÑоÑкÑ)?
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete rabbit.eats; alert( rabbit.eats ); // ? -
Ðли, наконеÑ, Ñакой:
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete Rabbit.prototype.eats; alert( rabbit.eats ); // ?
ÐÑвеÑÑ:
-
true.ÐÑиÑвоение нового знаÑÐµÐ½Ð¸Ñ ÑвойÑÑвÑ
Rabbit.prototypeвлиÑÐµÑ Ð½Ð°[[Prototype]]Ð²Ð½Ð¾Ð²Ñ ÑоздаваемÑÑ Ð¾Ð±ÑекÑов, но не на пÑоÑоÑип Ñже ÑÑÑеÑÑвÑÑÑÐ¸Ñ . -
false.ÐбÑекÑÑ Ð¿ÑиÑваиваÑÑÑÑ Ð¿Ð¾ ÑÑÑлке. Ðе ÑоздаÑÑÑÑ ÐºÐ¾Ð¿Ð¸Ñ
Rabbit.prototype, ÑÑо вÑегда один обÑекÑ, на коÑоÑÑй ÑÑÑлаеÑÑÑ Ð¸Rabbit.prototype, и[[Prototype]]обÑекÑаrabbit.Таким обÑазом, когда Ð¼Ñ Ð¸Ð·Ð¼ÐµÐ½Ñем ÑÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ Ð¿Ð¾ одной ÑÑÑлке, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð½Ñ Ð¸ по дÑÑгой.
-
true.ÐпеÑаÑиÑ
deleteпÑименÑеÑÑÑ Ðº ÑвойÑÑвам конкÑеÑного обÑекÑа, на коÑоÑом она вÑзвана. ÐдеÑÑdelete rabbit.eatsпÑÑаеÑÑÑ ÑдалиÑÑ ÑвойÑÑвоeatsиз обÑекÑаrabbit, но его Ñам неÑ. Таким обÑазом, пÑоÑÑо ниÑего не пÑоизойдÑÑ. -
undefined.СвойÑÑво
eatsÑдалено из пÑоÑоÑипа, оно болÑÑе не ÑÑÑеÑÑвÑеÑ.