1

コードファースト

    import flash.display.Sprite;
    import flash.events.Event;

    public class TestClosure extends Sprite
    {
        private var a:Object = {'value':'test'}

        public function TestClosure()
        {
            this.addEventListener(Event.ADDED_TO_STAGE,
                function (e:Event):void
                {
                    trace(a.value);//this works
//                  trace(this.a.value);this won't work
                }
            );
        }
    }

ご覧のとおり、"this" キーワードなしでインスタンス プロパティ a にアクセスすると成功します。

というわけで、これが正しいかどうかはわかりませんが、私の推測です。

クロージャ関数を作成するとき、コンパイラはスコープ変数を探し、それへの参照を作成します。

a.value を使用すると、コンパイラは関数スコープで a を探します。もちろん、var a は関数スコープで使用できるプライベート変数です。

this.a.value を使用すると、多くの状況で動的であり、実行時にのみ決定できるため、コンパイラは「this」をスキップします。クロージャー関数のように、「this」はインスタンスではなくグローバルを参照します。

ヒントをありがとう。

4

1 に答える 1