MTASCと戯れる ActionScript2 インスタンス変数宣言の謎

昨日書いたとおり、宣言時に初期化コードを書くと値は共有されます。とはいえ、static 修飾子はついていないので、インスタンス変数になります。つまり、変数は共有されません。

インスタンス変数宣言の右辺はクラス定義時に実行されるような気もしますが、実行結果は一体どこに格納されているのかがまったく謎です。

とのことで、昨日書いた、

あれでも、そうするともしかしてインスタンス変数だと思っていたものは、クラス変数相当の役割(オブジェクト間で共有される)をはたすのだろうか。

は大間違いだったようです。で、調べてみました。

コンストラクタの外で'var'宣言されたプロパティは、クラスの'prototype'に定義されます。その値はいわばデフォルト値として、インスタンスの'__proto__'プロパティを通じて参照されます。インスタンス自身にプロパティを設定するには、コンストラクタ中で処理を行う必要があります

ということらしいです。結論としては、コンストラクタ外で初期化(インライン初期化というらしい)した値は、そのクラスのprototypeプロパティに設定/格納*1されて、デフォルト値相当の扱いになる、と。ようやく納得がいった。
とすると、インライン初期化するのは数値くらいに留めておいたほうがいいですね。Arrayのようなコンテナだと思わぬ共有がおこってハマりそうです。

*1:ちなみに、ActionScriptがベースにしているECMAScript(JavaScript)のprototypeオブジェクト、__proto__オブジェクトに関しては、檜山さんのところ(http://d.hatena.ne.jp/m-hiyama/20050909/1126235062)が非常に詳しくわかりやすいです。