PDA

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


Evgan
20.02.2012, 15:52
День добрый
Никак не могу найти ответ (и гуглил и поиском по сайту прошелся, похожие темы находил, но конкретного ответа так и не получил). Посему спрошу в новой теме.

У меня создается объект, он имеет набор свойств, эти свойства переопределяются в соответствии с xml, мол объект становится эталонным, то есть в дальнейшем, новые созданные объекты этого же типа могли получить значения свойств как у эталонного. Сейчас у меня вручную прописано переопределение значений свойств новых объектов в соответствии к эталонному.
Но может все же можно получить список свойств объекта, что бы эту операцию провести циклом?

попадались на глаза такого рода конструкции:

var origMC:Sprite = new Sprite()
var cloneMC:Sprite = new Sprite()
for (var key:String in origMC){
cloneMC[key] = origMC[key]
}

но понятно это нерабочий вариант

необходимо некая функция по смыслу:

var Arr:Array = origMC.getPropertyList

и уже имея массив с свойствами объекта, работать дальше.

Вот только у меня сомнения, что эта функция существует+(

Внесите пожалуйста ясность, кто разобрался с этим моментом до конца.

MikroAcse
20.02.2012, 16:05
Вот:
var arrayProperty:Array=[]
for(var key:String in YourObject){
arrayProperty.push([YourObject[key],key])
}
YourObject=твой объект.
Получить данные можно так:

var i:uint=0
arrayProperty[i][0] //свойство объекта, например 123 или 'instanceName123'
arrayProperty[i][1] //название свойства, например 'x' или 'name'

Evgan
20.02.2012, 16:36
for(var key:String in YourObject)



не отработает ничего

MikroAcse
20.02.2012, 16:38
Ты что за YourObject принимаешь?

Добавлено через 15 минут
Вот пример:
var ob:Object={x:1,y:2,name:'troll'}

var arrayProperty:Array=[]

for(var key:String in ob){
arrayProperty.push([ob[key],key])
}

trace(arrayProperty)
// troll,name, 1,x, 2,y

carrotoff
20.02.2012, 16:55
describeType (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/utils/package.html#describeType())

MikroAcse
20.02.2012, 17:04
describeType
И от меня плюсик :)
Прикольная штукенция.

Evgan
20.02.2012, 17:48
describeType (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/utils/package.html#describeType())
Спасибо, то что надо.
Но в дальнейшем у меня ещё возник вопрос.
Описанный у carrotoff способ хорош, но он выдает абсолютно все свойства объекта, а мне как оказалось надобны не все а только определённые. Для этого я в классе создаю новое пространство имен
public namespace buttonspace;
И к нему отношу те свойства которые мне необходимо потом циклом перебирать.
Но вот как теперь это мое пространство имен обработать что бы оно мне выдал список входящих в него имен (моих свойств)

Подскажите пожалуйста. Help по этому поводу молчит

cleptoman
20.02.2012, 20:58
сделайте класс , дайте ему свойство getPropertyList и вперед )

ChuwY
20.02.2012, 21:06
Пространство имен никак не обработать.
Вот вам пара вариантов.

1. Занести имена всех нужных свойств в массив (например, статический для вашего класса):
// хранилище имен свойств
private static const PROPERTIES_NAMES : Vector.<String> = new <String>["x","y","alpha"];// например
// спрайт, свойства которого вы определяете
private static const PROTOTYPE_SPRITE : Sprite = new Sprite();
...
// метод выдающий спрайт со стандартными настройками
public function getStandartSprite():Sprite{
var sprite : Sprite = new Sprite();
for each(var propName : String in PROPERTIES_NAMES){
sprite[propName] = PROTOTYPE_SPRITE[propName];
}
return sprite;
}

2. Использовать прототипы (http://help.adobe.com/ru_RU/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f3f.html) :