允许事件侦听器访问其函数之外的变量

时间:2013-03-18 21:24:02

标签: actionscript-3 flash flashdevelop

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的值?

2 个答案:

答案 0 :(得分: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
   }
}

答案 1 :(得分:0)

您可以将侦听器放在函数中,这样它就会成为一个闭包,并且可以访问本地函数变量。

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

  stage.addEventListener(MouseEvent.CLICK, dunClicked);

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