Прототип после создания
В примерах ниже создаётся объект new Rabbit, а затем проводятся различные действия с prototype.
Каковы будут результаты выполнения? Почему?
Начнём с этого кода. Что он выведет?
function Rabbit() {}
Rabbit.prototype = {
eats: true
};
var rabbit = new Rabbit();
alert( rabbit.eats );
Добавили строку (выделена), что будет теперь?
function Rabbit() {}
Rabbit.prototype = {
eats: true
};
var rabbit = new Rabbit();
Rabbit.prototype = {};
alert( rabbit.eats );
А если код будет такой? (заменена одна строка):
function Rabbit(name) {}
Rabbit.prototype = {
eats: true
};
var rabbit = new Rabbit();
Rabbit.prototype.eats = false;
alert( rabbit.eats );
А такой? (заменена одна строка)
function Rabbit(name) {}
Rabbit.prototype = {
eats: true
};
var rabbit = new Rabbit();
delete rabbit.eats; // (*)
alert( rabbit.eats );
И последний вариант:
function Rabbit(name) {}
Rabbit.prototype = {
eats: true
};
var rabbit = new Rabbit();
delete Rabbit.prototype.eats; // (*)
alert( rabbit.eats );
Результат: true, из прототипа
Результат: true. Свойство prototype всего лишь задаёт __proto__ у новых объектов. Так что его изменение не повлияет на rabbit.__proto__. Свойство eats будет получено из прототипа.
Результат: false. Свойство Rabbit.prototype и rabbit.__proto__ указывают на один и тот же объект. В данном случае изменения вносятся в сам объект.
Результат: true, так как delete rabbit.eats попытается удалить eats из rabbit, где его и так нет. А чтение в alert произойдёт из прототипа.
Результат: undefined. Удаление осуществляется из самого прототипа, поэтому свойство rabbit.eats больше взять неоткуда.