Есть ли у объекта «дети» - PullRequest
       24

Есть ли у объекта «дети»

0 голосов
/ 07 января 2010

Я просто хочу знать, имеет ли рассматриваемый объект какие-либо суб-объекты внутри него или нет. Я действительно должен сделать это:

public static function getLength(o:Object):bool
{
  for (var item:* in o)
    if (item != "mx_internal_uid")
        return true;
  return false;
}

Нет ли способа сказать что-то подобное: Object.hasChildren (); ИЛИ ДАЖЕ Object.childCount ();

Данный объект НЕ расширяет DisplayObjectContainer. Это просто что-то вроде:

var Ob:Object;
Ob.SomeProp="xxx";
Ob.SomeOtherProp="zzz";

Как я могу узнать, сколько "записей" есть в объекте. (в данном случае 2).

Другими словами, как «for (var item: * in Ob)» знать, когда остановиться. ???

Ответы [ 3 ]

5 голосов
/ 07 января 2010

Хороший класс для проверки объектов - это встроенная гибкая система ObjectUtil . Я думаю, что вы пытаетесь достичь, было бы сделано с помощью ( obj является объектом для анализа):

ObjectUtil.getClassInfo (OBJ) .properties.length

Но ObjectUtil.getClassInfo было бы неплохо также посмотреть, если вы пытаетесь проанализировать объект, он возвращает много информации (подробнее о LiveDocs ).

Также имеется функция проверки простой переменной - ObjectUtil.isSimple

0 голосов
/ 07 января 2010

Как говорит Каджыр, если это DisplayObjectContainer, вы можете проверить наличие numChildren.

Если вы хотите проверить, содержит ли универсальные объекты простые свойства (примитивы, такие как Number, int, uint, String, Boolean) или сложныеСвойства (подобъекты, экземпляры некоторого класса), которые вы можете рассматривать как дочерние для этого универсального объекта, вы делаете следующее:

var testObj:Object = {id:1,name:'DumDum'};
var testObj2:Object = {id:2,name:'NumNum',data:[1,2,3,4,5,6,7,8,9],somethingComplex:{firstName:'Num',lastName:'Num'}};

trace(isSimple(testObj).length == 0);//prints true
trace(isSimple(testObj2).length == 0);//prints false
trace(isSimple(testObj2));

function isSimple(obj:*):Array{
    var complex:Array = [];
    for(var prop in obj){
        if(!(obj[prop] is String || obj[prop] is int || obj[prop] is uint || obj[prop] is Number  || obj[prop] is Boolean)) 
            complex.push({prop: obj[prop]});
    }
    return complex;
}

Если вы хотите получить количество членов (переменных, связанных с объектом), это достаточно просто получить:

var Ob:Object = {};
Ob.SomeProp="xxx";
Ob.SomeOtherProp="zzz";

trace(getMembersNum(Ob));//prints 2

function getMembersNum(obj:*):int{
    var result:int = 0;
    for(var prop in obj) result++;
    return result;
}

Вы могли бы написать это в вашем пакете / классе утилит, например, так:

public static function get numMembers(obj:*):int{
    var result:int = 0;
    for(var prop in obj) result++;
    return result;
}

HTH

0 голосов
/ 07 января 2010

Под объектом вы подразумеваете класс Object, следовательно, подсчет свойств или объекта в списке отображения, если последний, который обязательно расширяет объекты, DisplayObjectContainer, который имеет свойство numChildren

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...