2010-01-07 167 views
0

我只想知道对象是否有任何子对象。 难道我真的要做到这一点:对象是否有“子”

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)”如何知道何时停止。 ???

+0

你不需要知道什么时候停下来,你只需要数人怎么倍的循环。 – 2010-01-07 12:03:55

+0

answer updated bellow – 2010-01-07 12:04:36

回答

0

通过对象你的意思是Object类,因此计算性能,或在显示列表的对象,如果是后者,那对象肯定延伸的DisplayObjectContainer至极具有numChildren属性

+0

不,我不能指望这个对象是DisplayObjectContainer的扩展。 – Joshua 2010-01-07 11:41:15

0

由于kajyr说,如果它是一个级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

5

善类检查的对象是一幢建于ObjectUtil柔性。我想你想实现将用做什么(OBJ是分析的对象):.properties.length

ObjectUtil.getClassInfo(OBJ) ObjectUtil.getClassInfo如果你试图分析一个对象,它会返回很多信息(详见LiveDocs)。

它也有一个函数来检查,如果一个变量是一个简单的 - ObjectUtil.isSimple

+0

真棒!我不知道这个。非常方便!+1 有时候还没有使用过flex框架 – 2010-01-07 12:26:17

相关问题