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

ageent 12.08.2010 09:46

Работа с объектом
 
Привет всем.

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

e_gamer 12.08.2010 09:50

У object ?

Код AS3:

for (var i:String in myObject) {
trace(i);
}


ageent 12.08.2010 09:54

да object

хм, методы я по ходу достал, а вот свойства не распечатались.

mayakwd 12.08.2010 10:11

у объекта нет методов своих собственных, кроме:
hasOwnProperty, isPrototypeOf и propertyIsEnumerable, но все они не enumerable и поэтому приведенным выше способом вы достать их не сможете.

задачу сформулируйте корректнее.

e_gamer 12.08.2010 10:13

Код AS3:

for each (var c:String in myObject) {
trace(c);
}

получим значения свойств объекта.

ageent 12.08.2010 10:44

Допустим я создам объект
Код AS3:

var example:Object = new Object();
example.one=1;
example.two=2;
example.three=3;

как мне получить имена созданных свойств? one,two,three

e_gamer 12.08.2010 11:09

Он по порядку пойдет по свойствам при trace();
По такому же порядку пойдет и по значениям свойств.

ageent 12.08.2010 11:13

Я сделал
Код AS3:

var example:Object = new Object();
example.one=1;
example.two=2;
example.three=3;
 
for each (var c:String in example) {
trace(c);
}
 
Получил
3
2
1

что мне сделать что-бы имена свойств получить?

etc 12.08.2010 11:18

Цитата:

Сообщение от ageent (Сообщение 928425)
что мне сделать что-бы имена свойств получить?

Ещё раз посмотреть второй пост в этой теме.

e_gamer 12.08.2010 11:19

в первом цикле, что я написал получаем имена свойств.
во втором - значения этих свойств, в том же порядке, что и свойства в первом цикле.

сопоставить думаю не проблема.

ageent 12.08.2010 12:06

так чет я тупанул.

работает если я создаю объект "руками"

Код AS3:

var example:Object = new Object();
example.one=1;
example.two=2;
example.three=3;

если я создам объект из класса то уже почему-то не работает?

Код AS3:

package example  {
        public class Two {
                public var one:Number=1;
                public var two:Number=2;
 
        }
}

Из другого класса вызываю класс Two и пробую получить его свойства.
Код AS3:

package example  {
        import flash.display.*;
 
        public class One extends MovieClip {
 
                public function One() {
                                var two=new Two();
                                for each (var i:String in two) {
                                        trace(i); // ничего не выведет
                                }
                                //trace(two.one) покажет 1
                }
 
        }
 
}

почему?
и что за магические (i - имя свойства и с - значение свойства) в цикле for each. где про это почитать можно?

спасибо за помощь.

etc 12.08.2010 12:09

Они не магические, можно назвать как угодно. Для перечисления полей класса воспользуйтесь describeType.

ageent 12.08.2010 12:25

describeType помог. спасибо )

Добавлено через 3 часа 48 минут
может кому пригодится
Код AS3:

function debug_object(o:Object, show_all:Boolean):void {
  import flash.utils.*;
  var def:XML      = describeType(o);
  var props:XMLList    = def..variable.@name;
  if(show_all)      props += def..accessor.@name;
 
  for each (var prop:String in props) {
      trace(prop + ": " + o[prop]);
  }
}



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

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