由于某种原因,AS3无法将XML类的子函数识别为函数。
在文档中:
child(propertyName:Object):XMLList
列出XML对象的子项。
var xml:XML = new XML (
<body>
<bar value = "1"/>
<foo value = "2"/>
</body> );
var f:Function = xml.child as Function;
trace(XMLList(f("foo")).toXMLString());
此代码提供错误:Error #1006: value is not a function.
进一步检查后,发现f
为null
所以我的问题是,如何将child()
类的XML
函数分配给Function
类型的变量?
在旁注中,这是必要的原因是因为它在实用程序函数forEach(arr:Array, f:Function):Array
中使用,它在数组中的每个项上执行函数f
并返回结果。
答案 0 :(得分:0)
我不确定Flash Player如何实现XML类,但
trace(typeof(xml.child)); /*xml being in instance of XML class*/
输出“xml”。
对于您的问题,您可以创建自己的另一个函数,它接受XML对象并返回xml.child()。然后,您可以将此函数作为参数传递给forEach。
更新wrt评论:
明智的清洁度,我认为整个功能可以导出到另一个单元(类),其中包含一个包含xml的成员变量。现在,这个类的成员函数可以访问成员变量xml,并且也可以根据forEach的需要获取1个参数。
否则,作为快捷方式,您可以使用以下内容:
private function actualFunction(xml:XML, name:String):XML
{
return xml.child(name);
}
private function closureAroundActual(xml:XML):Function
{
return function(name:String):XML
{
actualFunction(xml, name);
}
}
然后在forEach中使用它
forEach(arr,closureAroundActual(xml)){}
我刚刚在这里输入了代码,因此语法可能有些偏差。但是,我想,你会明白的。