Форум 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=166133)

Vreden 30.08.2011 15:40

Поведение переменной
 
Такая ситуация в некотором классе имеется следующий код

Код AS3:

                        for each(var child:Object in __dataProvider)
                        {
                                var element:DoorPatternElement = new DoorPatternElement();
                                element.pattern = child["Pattern"];
                                this.addChild(element);
                                element.addEventListener(MouseEvent.CLICK, __clickElement);
                                element.y = __Y;
                                __Y+= element.height + 10;
                                __elements.push(element);
                        }
 
                public static var CHANGE_PATTERN:String = "CHANGE_PATTERN";
                private function __clickElement(e:MouseEvent):void
                {
                        var element:DoorPatternElement = DoorPatternElement(e.currentTarget);
                        this.dispatchEvent(new EventObject(CHANGE_PATTERN, element.pattern));       
                        trace(element.pattern)
                }

В другом классе, где находится слушатель события есть следующее

Код AS3:

                //value и info это части переменной element.pattern
                public function pattern(value:Array, info:Array):void
                {
                        __infoArray = info;
                        __adminArray = value
                        //Модификация переменных
                }

Проблема следующая, если событие мы послушали и модифицировали переменные, то element.pattern содержит эти изменения, а должен оставаться прежним, каким был изначально. Я так понимаю что __infoArray и __adminArray становятся ссылками на element.pattern, но как этого избежать?

Bgg 30.08.2011 15:42

Сделать копию.

Vreden 30.08.2011 16:00

Цитата:

Сообщение от Bgg (Сообщение 1026852)
Сделать копию.

Привет, Кэп!

Добавлено через 12 минут
Вот, Кэп, как нужно делать копию:
Код AS3:

                                function clone(source:Object):* 
                                {
                                        var copier:ByteArray = new ByteArray();
                                        copier.writeObject(source);
                                        copier.position = 0;
                                        return(copier.readObject());
                                }

А твой способ:

Код AS3:

                                Сделать копию.

Ни разу не работает.

in4core 30.08.2011 16:12

Здорова кэп ))

Bgg 30.08.2011 16:21

Вы спросили что делать, я вам сказал. Вы не знаете как сделать копию какого-то конкретного объекта?

Котяра 30.08.2011 16:58

сделать копии массивов

Vreden 30.08.2011 17:13

Цитата:

Сообщение от Bgg (Сообщение 1026864)
Вы спросили что делать, я вам сказал. Вы не знаете как сделать копию какого-то конкретного объекта?

Именно так


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

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