December 09, 2004
あーこれ怖いわー。きっちりわかってないと、すげー簡単にデータのスコープ、ミスるじゃん。なにげにデータがクライアント間で共有されていて、すげーびびった。
Client.prototypeとか使ってデータ量ケチるからいけないんだが、単体テストでは決して見つからない不具合とか作りこむよなー。
お手軽にソースコード変えてみて、簡単に同じ動きをしてしまったがゆえに信用できなくなってる自分がいるし。
基本原則は、
・メソッドはprototypeに定義しても大丈夫。
(機能としてはクラスメソッド、Staticメソッドの区別がない?)
・変数をprototypeに宣言すると、Static変数としてクライアント間で共有される。
・Clientオブジェクトに直接メソッドを定義するのは無駄である?!
・・・かな。
このほか、ベタにascファイル内に書くメソッドと、applicationオブジェクトにくっつけるメソッドの違いが理解できてなかったりします。applicationオブジェクトのスコープにアクセスできるだけか否かの違いなら良いんですけど。
早くAction Script2.0を導入して、
class CustomApplication extend FCSApplication
とかにくださいな。わかりにくくてしょうがないっす。
2004/12/10追記-------------------
>・Clientオブジェクトに直接メソッドを定義するのは無駄である?!
この方法が有効なときとは、クライアント毎に制御を変えたいときである。
例えば掃除機でゴミを吸う動作に対して、ノズルの先っぽを細いものにしたり、はぼきをつけたりしますが、そういう高度な制御をしたいときには有効である。クライアント毎に動作が変わらない場合は意味がない。
でも、これって所詮インターフェースに対する実装であると考えれば、別にクライアントオブジェクトに全部メソッドを宣言してしまっても、大きなデメリットはないような気がします。
何も考えたくないなら、全部インスタンスメソッドを定義してしまっても構わないような気がしますね。大量なデータをインスタンスに毎回定義してしまって、明らかに非効率な現象が目に見えて出れば別ですけど。むしろ、protptypeの変数か、SharedObjectか、クライアントObjに持たせるインスタンス変数かという切り分けの方がよっぽど重要かも。
OOP的メリット、デメリットでActionScriptというかJavaScriptで語るのは、概念に対して実装が曖昧だから、ホントちゃんとわかってないと非常にわかりにくいですね。だからこそActionScript2.0なわけですが。こっちはこっちで、はよ、同期メソッドをつけてくださいね。