是否有正式的AS3 API或类来检查对象是否没有属性?

时间:2015-01-31 21:21:47

标签: flex actionscript-3

是否有AS3 API,Flex类或比我下面列出的方法来测试对象是否为空?

这不适用于Flex应用程序:

var o:Object = {};
var result:Boolean = isEmpty(o); // true
var result2:Boolean = isEmpty(FlexGlobals.topLevelApplication); // true

function isEmpty(object) {
   for(var i in object) { return false; } 
   return true;
}

更新:我在询问Flash或Flex AS3 API中是否有方法,因为它不适用于Application类。我正在寻找像ObjectUtil这样的类,因为有些东西像原型链和像应用程序类这样的对象在执行简单的属性循环时不显示属性。请删除关闭标志,以便人们可以回答。

2 个答案:

答案 0 :(得分:1)

它为true类返回Application的原因是因为它没有任何可枚举的属性。 for..infor..each命令不会遍历对象的每个属性,只会循环可枚举的属性,这通常只是动态属性,如数组值和对象键(但这可以通过代理重载进行更改) )。

除了依靠对象的一般“isEmpty”检查之外,几乎可以肯定有更好的方法来做你想做的事情,但你可以使用describeType来查看是否有任何属性在类型上定义。您可能希望检查accessorvariable个节点。

您还可以通过检查构造函数来确保您正在处理的对象是Object的子类,而不仅仅是ObjectmyObject.constructor != Object

答案 1 :(得分:1)

不能说这是否有用,但还有另一种获取对象属性的方法:

import flash.utils.describeType;
trace(describeType(class));

param是Class实例或Class定义,它返回一个带有详细描述的XML,但是你需要解析它以获得任何有意义的东西。此外,它仅显示该类的公共属性。更新 - 哦,刚看到上一个答案已经描述过了。