我只是想知道相关的对象是否有任何子对象。 我真的必须这样做:
public static function getLength(o:Object):bool
{
for (var item:* in o)
if (item != "mx_internal_uid")
return true;
return false;
}
有没有办法说SOMETHING LIKE:Object.hasChildren(); 或者甚至是Object.childCount();
有问题的对象不会扩展DisplayObjectContainer。它就像是:
var Ob:Object;
Ob.SomeProp="xxx";
Ob.SomeOtherProp="zzz";
我怎么知道对象中有多少“条目”。 (在这种情况下为2)。
换句话说,“for(var item:* in Ob)”如何知道何时停止。 ???
答案 0 :(得分:5)
检查对象的一个好方法是在 ObjectUtil 中构建的flex。我认为你想要实现的目标是通过使用( obj 是要分析的对象)来完成的:
ObjectUtil.getClassInfo(OBJ).properties.length
但是 ObjectUtil.getClassInfo 如果您正在尝试分析对象,那么它也是一个好地方,它会返回大量信息(详情请参阅{{ 3}})。
它还具有检查变量是否简单的功能 - ObjectUtil.isSimple
答案 1 :(得分:0)
对象你指的是Object类,因此计算属性,或者对displaylist上的对象,如果是后者,对象肯定会扩展DisplayObjectContainer,它具有numChildren属性
答案 2 :(得分:0)
正如kajyr所说,如果它是一个DisplayObjectContainer,你可以检查numChildren。
如果要检查通用对象是否包含简单属性(基元,如Number,int,uint,String,Boolean)或复杂属性(subObjects,某些类的实例),您可能将其视为该通用对象的子项,你做了以下事情:
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