prototype拡張の注意点
以前、いくつかビルトインクラスを拡張する方法を紹介しましたが、 AS2でこうした拡張を行う場合、すごく基本的なことに気をつけなければいけません。
AS1とAS2の違いのひとつに「型チェック」があります。 基本的に、ビルトインクラスに勝手に拡張すると本来のクラスにないメソッドなのでコンパイル時におこられてしまいます。
ObjectやArray、MovieClipといったクラスはDynamicクラスです。 つまり動的にプロパティの追加をしても型チェックに引っかかることはありません。
一方、NumberやStringを拡張するとメソッドがあっても型チェックで引っかかります。
ですので、この手の拡張の場合Dynamicクラスにかぎって利用するか 必要なビルトインクラスを親クラスとして継承するか、 インスタンス操作用のカスタムクラスを作成することになります。
そもそもDynamicに拡張してしまうと独自メソッドが混入してコードの再利用性が落ちる上に、 コードの部分部分からは拡張したかどうか判別がつきません。
その意味で拡張クラスを作成し明示的に利用するほうがなにかとスマートだといえます。
// Arrayのprototypeを動的に拡張 Array.prototype.shuffle = function () { ... } var arr = new Array(); arr.shuffle();
// Arrayを継承して拡張 class xArray extends Array { public function shuffle() { ... } } var xarr = new xArray(); xarr.shuffle();
// Arrayを操作するクラス class CtrlArray { static public function shuffle( arr:Array ) { // shuffle処理 } } var arr = new Array(); CtrlArray.shuffle( arr );