MCからクラスの変数(メンバ?)を参照

例えば、以下のようなクラスを作ります。

class VarTest extends MovieClip
{
    var i:Number = 0;

    function VarTest()
    {
        var scope:Object = this;
        
        this.onEnterFrame = function()
        {
            scope.i++;
            trace(scope.i);
        };
    }
}

MCシンボルを作って、"リンケージプロパティ"の"AS2.0クラス"の欄に、
"VarTest"と記述します。
このMCシンボルをステージに配置してプレビューすると、

1
2
3
.
.
.

と出力されます。


僕が今回したいことは、
この配置したMCから、クラスで定義された"i"を参照することです。
ものは試しということで、配置されたMCに以下のスクリプトを書きます。

onClipEvent (enterFrame) {
    trace("i = " + i);
}

プレビューしてみると、(VarTestクラスの方のtraceは無視)

i = 0
i = 1
i = 2
.
.
.

と出力されました。


以上のことから、
「VarTestクラスで定義した(メソッド内ではない)変数は、
 割り当てたMCに定義することと同じ。」
と推測できます。


・・・ということは逆も可能か?
ということで、試してみます。
同じMCに、

onClipEvent (load) {
    var j:Number = 0;
}
onClipEvent (enterFrame) {
    j++;
}

と書きます。
そしてVarTestクラスの"onEnterFrame"を

this.onEnterFrame = function()
{
    trace("j = " + scope.j);
};

と修正してみます。
これでプレビューしてみると、

j = 1
j = 2
j = 3
.
.
.

と表示されました。
予想通りです!


これで処理が実行される順番も分かりました。
どうやら、MCに書かれた"onClipEvent(enterFrame)"の方が、
VarTestクラスの"this.onEnterFrame = function()"より早く実行されるようです。


なかなか便利だなぁ。


というレポートでした。