Почему установочное значение в одном ключе массива устанавливается в другом ключе? - PullRequest
0 голосов
/ 07 августа 2009

У меня есть массив объектов с различными объектами для хранения значений пользовательского интерфейса. Я хотел иметь кнопку, чтобы значения элемента 0 копировались по всему массиву. Однако я заметил, что установка одного установила их все. Вот пример без использования каких-либо циклов:

console.log('manual 3: ', lis[3].spacer.divider.type); // prints 'none'
lis[1].spacer.divider.type = 'bananas';
console.log('manual 3: ', lis[3].spacer.divider.type); // prints 'bananas'

Я совершенно сбит с толку, как настройка lis [1] также устанавливает lis [3]

Ответы [ 3 ]

0 голосов
/ 07 августа 2009

Поскольку переменные являются ссылочными переменными, и все они ссылаются на один и тот же объект, и, в результате, похоже, что при изменении одного все они изменяются, на самом деле все они являются одним и тем же базовым объектом.

Если вам нужно множество уникальных массивов, все они должны быть созданы как свежие или быть клонами друг друга.

0 голосов
/ 07 августа 2009

Оказывается, я ссылался на тот же объект. Благодарю. Это не щелкнуло мной, так как все другие объекты выше (spacer, lis) были уникальными. Я случайно установил разделитель на элемент по умолчанию для элемента spacer вместо функции, возвращающей значение по умолчанию.

Спасибо!

0 голосов
/ 07 августа 2009

Они оба должны быть ссылками на один и тот же объект.

Если это DOM-узлы, вы можете скопировать их, используя cloneNode(). Следите за ошибками IE - у него есть привычка неправильно клонировать (например, клонирование <select> не поддерживает selectedIndex).

См. Также Какой самый эффективный способ клонирования объекта JavaScript? для клонирования объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...