PDA

Просмотр полной версии : Работа с объектом


ageent
12.08.2010, 09:46
Привет всем.

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

e_gamer
12.08.2010, 09:50
У object ?


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
for each (var c:String in myObject) {
trace(c);
}


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

ageent
12.08.2010, 10:44
Допустим я создам объект

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
Я сделал

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
что мне сделать что-бы имена свойств получить?

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

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

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

ageent
12.08.2010, 12:06
так чет я тупанул.

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

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

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

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

}
}

Из другого класса вызываю класс Two и пробую получить его свойства.
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 минут
может кому пригодится
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]);
}
}