了解一些循环代码向上移动DisplayObject层次结构

时间:2014-12-20 23:22:26

标签: actionscript-3 flex flex4

背景 我正在通过精彩的(如果可悲的是没有记录的)AS3SVGRenderer lib,并遇到了一些我不理解的代码。

以下代码来自lib的Flex演示; " svgGroup"是一个Spark Group并附加了一个eventListener。单击时,它将返回单击的SVGElement实例。我试图理解这一点,以便我可以以编程方式访问SVGElements

以下函数由eventListener调用;它收到DisplayObject,它被点击为arg。

SVGElement延伸Sprite


    public static function getSVGElement(object:DisplayObject):SVGElement {
        while(object != null && !(object is SVGElement)){
            object = object.parent;
        }
        return object as SVGElement;
    }

问题:

让我试着阅读它。

  

虽然对象不是空且对象不是SVGElement

    set object to its parent
     

如果object为null或对象是SVGElement,那么

    break out of loop
    return object

所以基本上它是向上走的容器,直到找到一个SVGElement实例。我有这个权利吗?所以像这样:

SVGElement< - DisplayObject< - DisplayObject


    protected function svgGroup_clickHandler(e:MouseEvent):void {
        selectedElement = DisplayUtils.getSVGElement(e.target as DisplayObject);
    }

1 个答案:

答案 0 :(得分:1)

是的,这是对的。 getSVGElement函数也可以递归重写,如下所示:

public static function getSVGElement(object:DisplayObject):SVGElement {
    if (object == null || object is SVGElement) {
        return object as SVGElement;
    } else {
        return getSVGElement(object.parent);
    }
}

如果效率稍低,可能会更容易理解。