Массив объектов
Доброго времени суток! Уважаемые Форумчане!
У меня такая задача: Мне необходимо создать массив объектов. var mas_tree = []; Массив инициализирован. Массив будет хранить в каждой ячейки - объект. Объект имеет вид: var tree = { tree_id:'', tree_type:'', tree_quality:'', tree_diametr:'' }; Теперь мне необходимо собрать информацию. Собрали! По консолю проверил. Длалее необходимо написать функцию, которая будет заносить этот объект в массив. Функция вызывается по клику на объекте(div). Код:
<div id="button" onclick="data_tree();">Добавить</div> function data_tree(){ tree.tree_id = id_tree; tree.tree_type = insert_t_t; tree.tree_quality = insert_t_q; tree.tree_diametr = diametr; mas_tree[id_tree-1] = tree; } Теперь вкусненькое. В каждую ячейку массива заносятся элементы(Объект). Но, все записи затираются последней. Т.е., записали 6 объектов, получилось 6 ячеек(0-5). Все записи идентичны 5 ячейки. Почему?) За ранее спасибо. |
doox911,
var mas_tree = []; var tree = { tree_id:'' }; var n = 0; function data_tree(){ tree.tree_id = n; mas_tree[n++] = tree; } data_tree() data_tree() alert(JSON.stringify(mas_tree)) почувствуйте разницу var mas_tree = []; var n = 0; function data_tree() { var tree = { tree_id: '' }; tree.tree_id = n; mas_tree[n++] = tree; } data_tree() data_tree() alert(JSON.stringify(mas_tree)) |
Цитата:
|
doox911,
потому что все ссылки в вашем случае ведут на один и тотже обьект - поэтому они одинаковое содержимое и показывают. во втором примере обьекты каждый раз разные(новые) поэтому и ссылки ведут на разные обьекты с разным содержимым |
Цитата:
С объектом ладно, хотя Я ж каждый раз нажимая на див присваиваю его полям разные значения. Но почему в массиве то затираются? Индексы ж меняются. Просто может Я вас не понимаю. Каждый раз(при вызове функции) индекс увеличивается на один. Как Я понимаю этот же объект, но с другими значениями в свойствах, записывается в ячейку. Или вот, мысля. Каждая новая ячейка хранит ссылку на объект, а не сам объект? |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 16:12. |