Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.09.2008, 01:05
Krinart
 
Сообщений: n/a

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


i= 0;

for(var iHero= 0; iHero<Heroes.length; iHero++)
{
for(iUnit= 0; iUnit<Heroes[iHero].heroUnit.length; iUnit++)
{
// создадим запись в таблице Units
Units[i]= new Array();
Units[i]= UnitsTable[Heroes[iHero].heroUnit[iUnit]];

// добавим id героя-хозяина
Units[i].heroID= iHero;


Units[i].coord= new Array(); // обяъвим массив координат клетки юнита
Units[i].coord.left= -1; // x- координата
Units[i].coord.top= -1; // y- координата


// вместо id заготовки юнита в таблицу Heroes впишем id созданного юнита

Heroes[iHero].heroUnit[iUnit]= i;
i++;
}
}



здесь из таблицы UnitsTable, где хранятся шаблоны юнитов, выбирается нужный и всталяется в таблицу Units, а id этой записи заносится в массив юнитов героя

и всё бы ничего, но есть одна загвоздка, измение какогонибудь поля в строке любого элемента, почемуто меняет все остальные, в которых поле unitID совпадает
напрмер есть такой участок кода

Units[1].coord.left= 220;

после этого поле coord.left становится равным 220 у всех элементов, у которых поле
unitID== Units[1].unitID

хотя unitID является по сути просто указателем на тип юнита, и никак не связана я идентификацией элементов

я часа два бился над этой проблемой, так и не смог решить её... надеюсь только на вашу помощь
Ответить с цитированием
  #2 (permalink)  
Старый 04.09.2008, 09:45
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

приведённый кусо кода верный. Ошибка где-то в другом месте.
Ответить с цитированием
  #3 (permalink)  
Старый 04.09.2008, 10:30
Новичок на форуме
Отправить личное сообщение для sectus Посмотреть профиль Найти все сообщения от sectus
 
Регистрация: 04.09.2008
Сообщений: 7

С объектами такой способ не прокатывает, если пишешь
obj=new my_obj();
то создается объект, после
obj2 = obj;
не создается новый объект, а просто создается новая ссылка на уже существующий объект. obj2 и obj по сути будут являться одним и тем же. Для получения желаемого результата нужно создавать копию объекта.
Ответить с цитированием
  #4 (permalink)  
Старый 05.09.2008, 21:06
Krinart
 
Сообщений: n/a

sectus
Спасибо огромное, все решил.. сделал вот такую вот простенькую функцию

function createCopy(obj)
{
if(obj instanceof Array)
{
newObj= new Array();

for(prop in obj)
{
newObj[prop]= createCopy(obj[prop])
}
return newObj;
}

return obj;
}

и теперь всё отлично работает!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема закрытия окна (window.close()) в Mozilla и FireFox Гость AJAX и COMET 4 06.11.2008 19:22
проблема с обработкой DIV nerik AJAX и COMET 2 22.08.2008 17:40
Проблема с маркером kostian02 Общие вопросы Javascript 0 23.06.2008 16:10
проблема с ООП scuter Общие вопросы Javascript 19 23.03.2008 22:48
проблема с передачей русского текста в Prototype subaru Prototype & script.aculo.us 2 26.07.2007 16:56