Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.04.2010, 22:19
Кандидат Javascript-наук
Отправить личное сообщение для bayah Посмотреть профиль Найти все сообщения от bayah
 
Регистрация: 22.04.2010
Сообщений: 111

Проблема с массивом объектов.
for(var j=0; j<3; j++){

		array_of_marker = new Array()
		array_of_marker.push(new Object())
		array_of_marker[j]={id: 10} 

		alert(array_of_marker[0]['id'])
	}


Три раза должно появиться сообщение с цифрой 10. А получаю:
10, undefined, undefined.

Где я ошибаюсь?
Ответить с цитированием
  #2 (permalink)  
Старый 30.04.2010, 22:29
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Во всём.
Каждый раз делаете новый массив - array_of_marker = new Array()
Добавляете ему в конец новый объект array_of_marker.push(new Object())
Индексу массива - j - присваиваете новый объект со свойством id и значением 10
Показываете id индекса 0 у последнего массива

Теперь сделайте выводы.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #3 (permalink)  
Старый 01.05.2010, 08:00
Кандидат Javascript-наук
Отправить личное сообщение для bayah Посмотреть профиль Найти все сообщения от bayah
 
Регистрация: 22.04.2010
Сообщений: 111

Сообщение от Nekromancer Посмотреть сообщение
Во всём.
Каждый раз делаете новый массив - array_of_marker = new Array()
Добавляете ему в конец новый объект array_of_marker.push(new Object())
Индексу массива - j - присваиваете новый объект со свойством id и значением 10
Показываете id индекса 0 у последнего массива

Теперь сделайте выводы.
А блин, я дурак, че-то в 5 утра башка не варит совсем, создание массива конечно за цикл вынести.

А в остальном все верно, все как мне надо было. "Вталкиваю" новый объект в массив, потом элементу массива с индексом j, то есть объекту добавляю свойство id равно 10.

Ну блаодарю
Ответить с цитированием
  #4 (permalink)  
Старый 01.05.2010, 12:18
Интересующийся
Отправить личное сообщение для Kfuse Посмотреть профиль Найти все сообщения от Kfuse
 
Регистрация: 08.11.2009
Сообщений: 28

Вы не добавляете свойство id, вы на месте только что впихнутого объекта ставите другой у которого есть свойство id. То есть вторая строка вообще лишняя или третья строка должна выглядить так array_of_marker[j].id = 10; В последней тоже, похоже, опечатка. Вместо 0 должен быть j.
Ответить с цитированием
  #5 (permalink)  
Старый 01.05.2010, 16:58
Кандидат Javascript-наук
Отправить личное сообщение для bayah Посмотреть профиль Найти все сообщения от bayah
 
Регистрация: 22.04.2010
Сообщений: 111

Kfuse,
А, ну да, точно...
Опять лажаю)
А с 0 - это просто для примера.

Раз уж о массивах заговорил то еще у меня такой вопрос:
Создаю два массива
var a = new Array()
var b = new Array()

В коде они используются так:
- Сначала формируется массив a.
- Начинается цикл
- По массиву а создается массив b.
- В конце цикла делаю так:

a = b
b = new Array()

- Далее к следующей итерации цикла.

Таким образом, указатель на массив b теряется при каждой итерации и каждый раз создается новый массив b в памяти.

В учебнике(http://javascript.ru/basic/array) прочитал:

Цитата:
Javascript автоматически очищает память, как и Java, в отличие от C/C++, поэтому вы можете присвоить переменной новый массив:

arr = [ ]
При этом старый объект-массив будет удален в процессе "сборки мусора".
Так а когда именно происходит очистка, то есть освобождение памяти под тот самый массив b? И как javascript понимает что его нужно удалить? из памяти? Когда на массив нет ни одного указателя?
Ответить с цитированием
  #6 (permalink)  
Старый 01.05.2010, 18:32
Интересующийся
Отправить личное сообщение для Kfuse Посмотреть профиль Найти все сообщения от Kfuse
 
Регистрация: 08.11.2009
Сообщений: 28

Ну да. Разумеется с учётом косвенных указателей, типа у вас есть указатель на объект, одно из свойств которого указывает на другой объект и т.п. Всё до чего нельзя добраться по таким вот цепочкам указателей будет удалено при следующем прохоже сборщика-мусора. Когда именно будет этот проход точно сказать невозможно. Обычно при нехватке памяти выделенной процессу.

Цитата:
Таким образом, указатель на массив b теряется
На массив a.
Ответить с цитированием
  #7 (permalink)  
Старый 01.05.2010, 18:57
Кандидат Javascript-наук
Отправить личное сообщение для bayah Посмотреть профиль Найти все сообщения от bayah
 
Регистрация: 22.04.2010
Сообщений: 111

Сообщение от Kfuse Посмотреть сообщение
На массив a.
Ну да, конечно же на а.)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Быстрый поиск объектов Shasoft Общие вопросы Javascript 7 30.07.2009 05:28
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47