Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Применение for (var prop:String in Object) к объектам собственных классов. (http://www.flasher.ru/forum/showthread.php?t=122081)

Smirnov48 02.03.2009 13:01

Применение for (var prop:String in Object) к объектам собственных классов.
 
Хотел написать вот так:
Код AS3:

package 
{
        import flash.display.Sprite;
 
        public class Main extends Sprite
        {
                public function Main()
                {
                        var o:Object = new Object();
                        o.prop1 = "a";
                        o.prop2 = "b";
                        o.prop3 = "c";
                        o.prop4 = "d";
 
                        var o2:Object = new SomeObject();
 
                        trace("Печатаем свойства Object");
                        for (var p:String in o) {
                                trace(p + " = " + o);
                        }
 
                        trace("Печатаем свойства SomeObject");
                        for (var p2:String in o2) {
                                trace(p2 + " = " + o2);
                        }
                }
        }
}

Код AS3:

package
{
        public class SomeObject
        {
                public var prop1:String = "a";
                public var prop2:String = "b";
                public var prop3:String = "c";
                public var prop4:String = "d";
 
                public function SomeObject()
                {
                }
        }
}

Output:
Код:

Печатаем свойства Object
prop2 = [object Object]
prop1 = [object Object]
prop3 = [object Object]
prop4 = [object Object]
Печатаем свойства SomeObject

Пробовал делать dynamic классу, и расширял Object, и пытался приводить к Object-y. Бесполезно - for in не видит свойства SomeObject. Подскажите пожалуйста способ заставить его работать? По возможности, не хотелось бы усложнять SomeObject.

cleptoman 02.03.2009 13:12

describeType
м?

wvxvw 02.03.2009 13:15

Наследоваться от прокси и оверрайдить proxy_internal::nextName, proxy_internal::nextValue

Яски 02.03.2009 22:55

Почему бы не использовать массив?

BlooDHounD 02.03.2009 23:03

wvxvw, может flash_proxy? а то уже грустно смотреть ...

Smirnov48 03.03.2009 11:22

Спасибо. Пришлось скрестить describeType с flash_proxy. Вот, что получилось:
Код AS3:

package
{
        import flash.utils.describeType;
        import flash.utils.Proxy;
        import flash.utils.flash_proxy;
 
        public class SomeObject extends Proxy
        {
                public var prop1:String = "a";
                public var prop2:String = "b";
                public var prop3:String = "c";
                public var prop4:String = "d";
 
 
                override flash_proxy function nextNameIndex(index:int):int
                {
                        if ((index < describeType(this).variable.length()) &&
                                        (describeType(this).variable[index].@name != "")) {
                                return ++index;
                        } else {
                                return 0;
                        }
                }               
 
                override flash_proxy function nextName(index:int):String
                {
                return describeType(this).variable[--index].@name;
                }
        }
}

Еще пришлось поменять Main:
Код AS3:

                        trace("Печатаем свойства Object");
                        traceProps(o);
 
                        trace("Печатаем свойства SomeObject");
                        traceProps(o2);
                }
 
                private function traceProps(obj:Object):void
                {
                        for (var p:String in obj) {
                                trace(p + " = " + obj[p]);
                        }
                }

И все заработало, как надо!:yahoo:


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

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