0
public class Main extends MovieClip {

  public function Main():void {
    getOne()
  }

    function getOne():void {
      var varOne:Boolean = false;

      stage.addEventListener(MouseEvent.CLICK, dunClicked);
    }

    function dunClicked(e:Event):void {
      if(!varOne) trace("Nope...");
    }
}

现在......我知道如果我将 varOne 放在 Class 中,它将被视为一种“全局变量”(如果我错了,请纠正我......)我想知道 EventListener 是否还有另一种方法可以查看varOne 的价值?

4

2 回答 2

1

将 'varOne' 声明为 Main 类的成员是最好的做法。创建闭包(内部函数)当然也可以,但不是一个很好的做法,因为您无法删除使用此类匿名函数定义的事件侦听器。

它不会是“全局的”,而是这个类实例的一个属性,从技术上讲,您应该通过编写 'this.varOne'(和 'this.getOne()'、'this.dunClicked'...)来访问它,但是在AS3/Java/等。你可以写'varOne'。

public class Main extends MovieClip {

   private var varOne:Boolean; // defaults to false;

   public function Main():void {
      getOne()
   }

   function getOne():void {
      stage.addEventListener(MouseEvent.CLICK, dunClicked);
   }

   function dunClicked(e:Event):void {
      if (!varOne) trace("Nope...");
      // if (!this.varOne) trace("Nope..."); // this is equivalent
   }
}
于 2013-03-22T19:53:32.053 回答
0

您可以将侦听器放在函数内部,因此它将成为一个闭包并且可以访问本地函数 var。

function getOne():void {
  var varOne:Boolean = false;

  stage.addEventListener(MouseEvent.CLICK, dunClicked);

  function dunClicked(e:Event):void {
     if(!varOne) trace("Nope...");
  }
}
于 2013-03-18T21:31:51.450 回答