首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个子类中另一个子类的flash as3调用函数

一个子类中另一个子类的flash as3调用函数
EN

Stack Overflow用户
提问于 2011-12-02 05:50:51
回答 3查看 2.6K关注 0票数 1

我试图从一个子类(Wedge.as)调用另一个子类(Circle.as)中的函数。Circle.as由document类(Tree.as)实例化,Wedge.as由Circle.as实例化。我该怎么做呢?这是我的代码:

Tree.as

代码语言:javascript
复制
package com.treediagram  
{  
  public class Tree extends MovieClip  
  {
    var firstCircle:Circle = new Circle();
    addChild(firstCircle);
  }
}

Circle.as:

代码语言:javascript
复制
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

代码语言:javascript
复制
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?

但这有点难以理解,因为它与我的问题有关。其中一个解决方案有效,但被评论为格式不佳,另一个解决方案不起作用,因此我希望确保我的代码结构正确。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-02 06:09:50

通常,父类知道它的子类是可以的,但反之亦然。如果您不遵循这一原则,您将最终创建Circular dependencies,并最终获得紧密耦合且难以维护的代码。因此,关键是防止孩子需要直接调用其父对象的方法。

一种解决方案是使用event-based communication。当在子类中发生某些事情时,它会触发一个事件,父类可以选择是否处理该事件。

例如:

代码语言:javascript
复制
public function Circle()  
{
  var wedge:Wedge = new Wedge();
  wedge.addEventListener(MouseEvent.CLICK, onWedgeClick);
}
private function onWedgeClick(e:MouseEvent) {
  deactiveCircle();
}
票数 2
EN

Stack Overflow用户

发布于 2011-12-02 05:54:08

只需从Circle类中将wedgeClickHandler附加到楔形成员-它将很好地接收MouseEvent,并且可以直接访问私有函数。

票数 1
EN

Stack Overflow用户

发布于 2011-12-02 05:54:50

不能调用Circle.deactivateCircle(),因为它的可访问性设置为private,而且您的Wedge对象需要具有对要对其调用方法的Circle对象的引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8348773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档