Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.01.2014, 19:45
Аспирант
Отправить личное сообщение для doox911 Посмотреть профиль Найти все сообщения от doox911
 
Регистрация: 01.04.2013
Сообщений: 56

Массив объектов
Доброго времени суток! Уважаемые Форумчане!

У меня такая задача:

Мне необходимо создать массив объектов.
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 ячейки. Почему?)

За ранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 16.01.2014, 20:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

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))
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2014, 20:27
Аспирант
Отправить личное сообщение для doox911 Посмотреть профиль Найти все сообщения от doox911
 
Регистрация: 01.04.2013
Сообщений: 56

Сообщение от рони Посмотреть сообщение
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))
Я понял так, что при каждом вызове функции объект инициализируется заново? Но почему все записи в массиве записывает идентично последней? Как это происходит?
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2014, 20:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

doox911,
потому что все ссылки в вашем случае ведут на один и тотже обьект - поэтому они одинаковое содержимое и показывают.

во втором примере обьекты каждый раз разные(новые) поэтому и ссылки ведут на разные обьекты с разным содержимым
Ответить с цитированием
  #5 (permalink)  
Старый 16.01.2014, 20:52
Аспирант
Отправить личное сообщение для doox911 Посмотреть профиль Найти все сообщения от doox911
 
Регистрация: 01.04.2013
Сообщений: 56

Сообщение от рони Посмотреть сообщение
doox911,
потому что все ссылки в вашем случае ведут на один и тотже обьект - поэтому они одинаковое содержимое и показывают.

во втором примере обьекты каждый раз разные(новые) поэтому и ссылки ведут на разные обьекты с разным содержимым
Прошу прощения за тему не в том разделе.

С объектом ладно, хотя Я ж каждый раз нажимая на див присваиваю его полям разные значения. Но почему в массиве то затираются? Индексы ж меняются.

Просто может Я вас не понимаю.

Каждый раз(при вызове функции) индекс увеличивается на один. Как Я понимаю этот же объект, но с другими значениями в свойствах, записывается в ячейку. Или вот, мысля. Каждая новая ячейка хранит ссылку на объект, а не сам объект?
Ответить с цитированием
  #6 (permalink)  
Старый 16.01.2014, 22:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от doox911
Каждая новая ячейка хранит ссылку на объект, а не сам объект?
да
Ответить с цитированием
  #7 (permalink)  
Старый 16.01.2014, 22:36
Аспирант
Отправить личное сообщение для doox911 Посмотреть профиль Найти все сообщения от doox911
 
Регистрация: 01.04.2013
Сообщений: 56

Сообщение от рони Посмотреть сообщение
да
Спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив объектов xmlHttpRequest Seintero AJAX и COMET 1 10.12.2013 22:29
массив объектов bohdan Общие вопросы Javascript 2 29.02.2012 23:40
Массив объектов или объект объектов vladlen Общие вопросы Javascript 19 30.10.2010 03:10
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Быстрый поиск объектов Shasoft Общие вопросы Javascript 7 30.07.2009 05:28