LINUX.ORG.RU

JavaScript


0

0

Проверьте, плс, корректность утверждения:

function Figure() { }
Figure.prototype = {
   active : true,
   coords : [0, 0]
};
Figure.prototype.constructor = Figure;
var fig1 = new Figure();
var fig2 = new Figure();
fig1.active = false;
fig1.coords[0] = 10;
alert(fig2.active); // => true
alert(fig2.coords[0]); // => 10

// причина изменения coords[0] у второго объекта (fig2), в том, что при
// изменении элемента массива coords первым объектом (fig1), сначала
// был произведён поиск массива для доступа к его элемнту внутри объекта
// fig1, массив не был найден и далее был произведён поиск в прототипе,
// где он и был найден. Элемeнты находящиеся в прототипе функции разделяются
// всеми созданными функцией объектами. Причина же неизменности переменной
// active у fig2 заключается в том, что при присвоении свойству в объекте,
// если свойство отсутствует, оно просто создаётся.
// fig1.active = false; создал свойство в fig1,
// alert(fig2.active); вывел значение из прототипа

★★

Последнее исправление: Reaper (всего исправлений: 1)

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.