xml.child不是函数?

时间:2013-06-12 03:27:48

标签: xml actionscript-3 function

由于某种原因,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.

进一步检查后,发现fnull 所以我的问题是,如何将child()类的XML函数分配给Function类型的变量?

在旁注中,这是必要的原因是因为它在实用程序函数forEach(arr:Array, f:Function):Array中使用,它在数组中的每个项上执行函数f并返回结果。

1 个答案:

答案 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)){}

我刚刚在这里输入了代码,因此语法可能有些偏差。但是,我想,你会明白的。