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

Torero 02.12.2007 10:27

Как сослаться на свойство объекта?
 
Доброго времени суток.
Подскажите пожалуйста: можно-ли сохранить в переменной ссылку на какое-либо свойство определенного объекта?
что-то наподобие:
Код:

private var obj_prop:Object;
public function myClass(o:Object, p:String){
        obj_prop=o[p];
}

protected function setPropValue(v:uint):void{
        obj_prop=v;
}


etc 02.12.2007 10:48

Ссылки делаются только на данные сложного типа, такие как Array, Object и т.п. Number, String, Boolean, int, uint не могут иметь ссылок на себя.

Torero 02.12.2007 10:51

Пасиб.

DRAGOnoid 17.01.2008 18:35

а у меня почему то не получается сослаться на XML или XMLList
правда ссылки уменя внутри конструктора второго класса, а XML в первичном конструкторе первого класса.

короче код Index.as:
Код:

package {
        import flash.display.*;
        import flash.xml.*;
        public class Index extends Sprite {
                public var someXML:XML;
                public function Index ():void {
                        this.someXML=new XML (<xml y="666"/>);
                        var test:Test=new        Test(this);
                }
        }
}
import flash.display.*;
import flash.xml.*;
class Test extends Sprite {
        public var parentXML : XML;
       
        public function Test (Parent:Object):void {
                this.parentXML = Parent.someXML;
                trace (this.parentXML.@y);        // оригинал
               
                // шаг 1
                this.parentXML.@y =777;
                trace (Parent.someXML.@y); // покажет 777 - значит ссылка пашет
                // шаг 2
                Parent.someXML.@y = 888;
                trace (this.parentXML.@y); // покажет 888 - значит ссылка пашет
                // шаг 3
                Parent.someXML = new XML(<xml y="444"/>);
                trace (this.parentXML.@y); // покажет 888 - значит ссылка СЛОМАЛАСЬ
                // шаг 4
                this.parentXML = Parent.someXML;
                trace (this.parentXML.@y); // покажет 444 - ссылка пашет
                // шаг 5
                this.parentXML = new XML(<xml y="333"/>);
                trace (Parent.someXML.@y); // покажет 444 - ссылка сломана
        }
}

в принципе как получается что ссылка теряется на шаге 3 и 5 я представление имею - вопрос как такого избежать? чтобы присвоение нового объекта было ссылающемуся объекту а не ссылке.

etc 17.01.2008 20:07

Ну все верно, new XML возвращает ссылку на новый объект. А parentXML продолжает ссылаться на старый объект, как ни в чем ни бывало.
Избежать — сделать биндинг на сеттерах и геттерах, только зачем оно надо — не представляю. И не понимаю, зачем создавать две ссылки на один объект, чтобы потом иметь геморрой с ними…

DRAGOnoid 18.01.2008 01:20

сделать биндинг на сеттерах и геттерах - это что ты имеешь ввиду?
сделать что то типа ?
Код:

public function set parXML (xml:XML):void {
this.Parent.someXML = xml;
}
public function get parXML ():XML{
return this.Parent.someXML;
}

ну да идея неплохая :victory:

у меня например есть общая XML где хранятся всякие данные..
есть много конструкторов классов, которые по разному обрабатывают разные элементы этой XML. причём например разные конструкторы могут использовать один и тот же нод. Ну там стили к тексту с помощью CDATA, сам текст, стили элементов по которым рисовать окна и т.д.
вот и хочу чтобы загрузив например новую XML с новыми данными , ссылки на этот общий XML Не терялись. А иначе получается нет обновления.


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

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