背景 我正在通过精彩的(如果可悲的是没有记录的)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);
}
答案 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);
}
}
如果效率稍低,可能会更容易理解。