Javascript-форум (https://javascript.ru/forum/)
-   Учебные материалы (https://javascript.ru/forum/study/)
-   -   Странное поведение массива с объектом (https://javascript.ru/forum/study/68452-strannoe-povedenie-massiva-s-obektom.html)

IsaacMech 18.04.2017 09:06

Странное поведение массива с объектом
 
Здравствуйте! Изучаю JavaScript на Khan Academy и столкнулся с такой проблемой. Я хочу, чтобы массив с объектом увеличивался каждый раз, когда число меньше длины другого массива. Написал такой код:
var drawShelf = function() {
    for (var i = 0; i < diskShelf.length; i++) {
        diskShelf[i].capacity = floor(diskShelf[i].height / (diskShelf[i].space.disk + diskShelf[i].thickness.shelf));
        totalCapacity += diskShelf[i].capacity;
        if (totalCapacity < disk.length) {
            diskShelf.push(diskShelf[i]);
            println(diskShelf[i].x + " | " + diskShelf[i + 1].x + " / " + i);
            diskShelf[i + 1].x += diskShelf[i].width + diskShelf[i].space.shelf;
            println(diskShelf[i].x + " | " + diskShelf[i + 1].x + " / " + i); 
        }
    }
};

Вроде всё правильно, только вот почему-то операция ведёт себя как-то странно.
diskShelf[i + 1].x += diskShelf[i].width + diskShelf[i].space.shelf;

Вместо того, чтобы изменить значение в одном элементе массива diskShelf[i + 1], она меняет значение и в diskShelf[i]. В итоге получается, что diskShelf[i].x = diskShelf[i + 1]. Я не могу понять в чём проблема. Буду рад, если кто-нибудь сможет объяснить что происходит.

IsaacMech 18.04.2017 09:50

Ох, я понял. То есть "присвоив" объёкту массива i + 1 объект i, то я просто сослался на его адрес в памяти, а не клонировал объект?

IsaacMech 18.04.2017 10:03

Спасибо, что помогли разобраться!


Часовой пояс GMT +3, время: 23:39.