我正在尝试从另一个子类(Wedge.as)调用一个子类(Circle.as)中的函数。 Circle.as由文档类(Tree.as)实例化,Wedge.as由Circle.as实例化。我该怎么做呢?这是我的代码:
Tree.as
package com.treediagram
{
public class Tree extends MovieClip
{
var firstCircle:Circle = new Circle();
addChild(firstCircle);
}
}
Circle.as:
package com.treediagram
{
public class Circle extends MovieClip
{
private var wedge:Wedge;
public function Circle()
{
var circleHolder:MovieClip = new MovieClip();
var circleClip:MovieClip = new MovieClip();
circleClip.addEventListener(MouseEvent.CLICK,circleClickedEvent);
}
private function circleClickedEvent(e:MouseEvent):void
{
var wedgeHolder:MovieClip = new MovieClip();
circleHolderRef.addChildAt(wedgeHolder,1);
var wedge:Wedge = new Wedge(wedgeHolderRef);
wedge.addEventListener(MouseEvent.CLICK,wedgeClickEvent);
}
private function wedgeClickEvent(e.target){
trace ('click'); //NOT WORKING
}
}
}
Wedge.as
package com.treediagram
{
public class Wedge extends MovieClip
{
public function Wedge(wedgeHolderRef)
{
var wedgeClip:MovieClip = new MovieClip();
wedgeClip.addEventListener(Event.ADDED_TO_STAGE, wedgeAddedEvent);
wedgeHolderRef.addChild(wedgeClip);
}
}
}
我在这里看到了类似的问题:
How to call a function in a Class from another Class?
但由于它与我的问题有关,因此有点难以理解。其中一个解决方案有效,但被评为坏形式,另一个无效,所以我想确保正确构建代码。
答案 0 :(得分:2)
通常,父类可以知道它的子节点,但不是相反。如果你不遵循这个原则,你最终会创建Circular dependencies并最终得到紧密耦合且难以维护的代码。关键是要防止孩子直接调用其父方法。
一种解决方案是使用event-based communication。当子类中发生某些事情时,它会触发父类可能选择处理的事件。
例如:
public function Circle()
{
var wedge:Wedge = new Wedge();
wedge.addEventListener(MouseEvent.CLICK, onWedgeClick);
}
private function onWedgeClick(e:MouseEvent) {
deactiveCircle();
}
答案 1 :(得分:1)
只需将CirclegeClickHandler附加到Circle类中的wedge成员 - 它就会很好地接收MouseEvent,它可以直接访问私有函数。
答案 2 :(得分:0)
您无法调用Circle.deactivateCircle()
,因为其可访问性设置为private
,并且您的Wedge
对象需要引用您要调用的Circle
对象方法。