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が代入される.