Apache flex 在flex中获取类型
有人能告诉我如何在flex中识别对象的类型吗?特别是我有一个数组,我现在在其中存储多个类型(但所有UIComponents),当我评估数组时,我想知道我是有一个TextInput控件还是一个RadioButton。有人有主意吗Apache flex 在flex中获取类型,apache-flex,flash,actionscript-3,reflection,Apache Flex,Flash,Actionscript 3,Reflection,有人能告诉我如何在flex中识别对象的类型吗?特别是我有一个数组,我现在在其中存储多个类型(但所有UIComponents),当我评估数组时,我想知道我是有一个TextInput控件还是一个RadioButton。有人有主意吗 提前感谢您可以使用“is”操作符对特定类进行测试,也可以使用flash.utils.getQualifiedClassName()(您将其传递给您的对象)-这将返回一个完全限定类名字符串。is操作符测试类型兼容性,是的。从文档中,是: 。。。计算对象是否为空 与特定数据类
提前感谢您可以使用“is”操作符对特定类进行测试,也可以使用flash.utils.getQualifiedClassName()(您将其传递给您的对象)-这将返回一个完全限定类名字符串。is操作符测试类型兼容性,是的。从文档中,
是
:
。。。计算对象是否为空
与特定数据类型兼容,
类或接口。使用is
运算符,而不是instanceof
用于类型比较的运算符。你可以
还可以使用is
操作符进行检查
对象是否实现
接口
该类别中的其他有用运算符有typeof
(返回原语的字符串表示形式)、instanceof
(类似于is
,但忽略接口兼容性)和as
。ActionScript操作符的完整列表
希望有帮助 运算符“is”表示一个选项
然后是操作符,它可能有用,也可能不有用,这取决于具体情况
还有带有静态方法的ObjectUtil类。这个函数返回的不仅仅是对象的类名
不幸的是,运算符“typeof”对于类是无用的
而且,正如Branden Hall已经建议的那样,.这里有一些简单的伪代码,演示了如何使用
is
操作符来完成您想要做的事情:
for each (var item:* in myArray)
{
if (item is TextInput)
doSomethingWithTextInput(item as TextInput);
else if (item is RadioButton)
doSomethingWithRadioButton(item as RadioButton);
}
您的最佳选择是使用“is”操作符,并使用以下内容:
for( var i:int = 0; i < componentArr.length; i++ )
{
var comp:UIComponent = componentArr[ i ];
if( comp is DataGrid )
// Handle DataGrid functionality here.
else if (comp is DropDown )
// Handle DropDown here
}
对于希望对象成为特定类(而不是子类)成员的情况,还有另一个选项:可以使用对象的构造函数属性和switch语句
for( var i:int = 0; i < componentArr.length; i++ )
{
var klass:Class = componentArr[ i ].constructor;
switch( klass )
{
case DataGrid:
// Handle DataGrid
break;
case Text:
// Handle Text
break;
case NumericStepper:
// Handle NumericStepper
break;
default:
// Handle default
break;
}
}
for(变量i:int=0;i
尝试使用“className”属性
根据具体情况,它应该返回“TextInput”或“Button”
for each (var item:* in myArray)
{
if(item.hasProperty('className'))
{
trace("item ["+i+"] is :" + item['className']);
}
}
其工作原理:)
下面是我解决这个问题的方法
switch( true )
{
case item is Customer_SF:
c = item as Customer_SF;
break;
case item is Opportunity:
o = item as Opportunity;
break;
case item is Product:
o = ( item as Product )._opportunity;
break;
default:
return true;
}
只是使用了“is”:var b:Boolean=arr[i]is TextInput,这是唯一也是最好的方法吗?ObjectUtil.getClassInfo(啊,是的--getQualifiedClassName()。它多次派上用场。你可以使用Object而不是*除非你希望数组中有名称空间和其他疯狂的项。好的,我只是想让它尽可能灵活。事实上,如果你知道你只需要UIComponents或DisplayObjects,那么你可以使用它。
switch( true )
{
case item is Customer_SF:
c = item as Customer_SF;
break;
case item is Opportunity:
o = item as Opportunity;
break;
case item is Product:
o = ( item as Product )._opportunity;
break;
default:
return true;
}