Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с массивом, помогите разобраться. (http://www.flasher.ru/forum/showthread.php?t=144404)

MadEx 10.09.2010 21:25

Проблема с массивом, помогите разобраться.
 
Имеется следующий код. Если в кратце - после загрузки внешнего xml функция записывает все данные из xml в массив. Каждый элемент массива -object.

После того как цикл выполнен, при обращении к любому из элементов массива возвращается значение последнего элемента.

Почему?
Код AS3:

var arrCatalog:Array = new Array();              
 
public function xmlColLoaded(e:Event) {
                        var objCol:Object = new Object();
                        colors = XML(colorsLoader.data);
 
                        for each(var prop:XML in colors.color) {
                                objCol.id = prop.id;
                                objCol.image = prop.image.toString();
                                objCol.items = new Array();
 
                                arrCatalog.push(objCol);
                                // Здесь всё выводится нормально: img1.jpg img2.jpg ... img8.jpg)
                                trace(arrCatalog.length-1,arrCatalog[arrCatalog.length-1].image);
 
                                }
 
                        for(var i=arrCatalog.length-1; i>=0;i--) {
                                // А тут уже будет выведено 8 раз img8.jpg
                                trace(arrCatalog[i].image);
                        }
 
                }


Rzer 10.09.2010 21:28

Код AS3:

colors = XML(colorsLoader.data);
        for each(var prop:XML in colors.color) {
          var objCol:Object = new Object();
....

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

MadEx 10.09.2010 22:34

Спасибо, за ответ! Теперь всё работает )

А я-то думал, что в элемент массива записывается не ссылка на объект, а сам объект.

gloomyBrain 10.09.2010 22:54

Цитата:

А я-то думал, что в элемент массива записывается не ссылка на объект, а сам объект.
В AS3 с объектом можно сделать только 2 вещи:
1) new ComeClass() - создать новый объект
2) BitmapData.dispose() - удалить объект из памяти (работает только с BitmapData)

Все остальные операции происходят со ссылками на объекты


Часовой пояс GMT +4, время: 15:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.