Rso's Jotter

日々の開発の知見のメモやその他雑記

ActionScriptのthisがよく分からん

ASのお話.自分のメモ用
マウスイベントのリスナを追加するとき,

public class TestActionScript extends Sprite
{
  var main : Sprite;
  var isMousePressed : Boolean = false;

  public function init() : void {
    main.stage.addEventListener(MouseEvent.MOUSE_DOWN, click);
  }

  public function click(e:Event):void{
    this.isMousePressed = true;
  }

と書けばフィールドのisMousePressedにtrueが代入されるけど,
このclickされた時の動作する関数を格好よく(?)内部にネストして,
↓のように記述すると

  public function init() : void {
    main.stage.addEventListener(MouseEvent.MOUSE_DOWN, function(e:Event):void{
    this.isMousePressed = true;
  });

これでもエラー無しで実行されるが,外のクラスのisMousePressedにはtrueは代入されない.
たぶんthisのスコープが違うせいと思うけど,これはエラーもしくは警告を出すべきんなんじゃないかと感じる.
しかもFlex Builder 3のコンテンツアシスト使うとthis.isMousePressedが表示されるし.単にJavaに慣れているから
違和感があるだけなのか.ちなみにJavaだとthisで参照できないからちゃんとエラーで弾いてくれる


ちなみに↓のようにthisをはずすと

  public function init() : void {
    main.stage.addEventListener(MouseEvent.MOUSE_DOWN, function(e:Event):void{
    isMousePressed = true;
  });

問題なく外のクラスのisMousePressedにtrueが代入される.