0

由于某种原因,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
所以我的问题是,如何将Class的child()函数分配给 type 的变量?XMLFunction

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

4

1 回答 1

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

我刚刚在这里输入了代码,所以语法可能有点不对劲。但是,我想,你会明白的。

于 2013-06-12T03:55:51.800 回答