配列、エラー。今日のまとめ

p.126~158

  • 配列

結合配列とはハッシュのこと。ストリングをキーとしたものは今まで通り使える。加えて、オブジェクトをキーとしたDictionaryというクラスがある。

以下の場合は2つの参照があるため、両方とも開放してあげなければガベージコレクションの対象とならない。

var hoge = new Object();
var dic = new Dictionary();
dic[hoge] = "foo";
hoge=null; // even not eligible for garbage collection
delete dic[hoge]; // eligible for garbage collection

Dictionaryオブジェクト作成時にuseWeakReferenceを指定すると、hogeへのnull代入だけでガベージコレクションの対象となるそうだ。(でも、いったい何のために使うんだ?その後のDictionaryの挙動もわからないので後で動作確認する。)

var hoge = new Object();
var dic = new Dictionary(true);
dic[hoge] = "foo";
hoge=null; // eligible for garbage collection

p.131
定義するクラスが Array のサブクラスであることを示すには、extends キーワードを使用します。Array のサブクラスで
は、Array クラスと同様に dynamic 属性を使用します。これに従わないとサブクラスが正常に機能しません。

最後の”正常に機能しません”とはどういうことだ。ランタイムエラーなのかコンパイルエラーなのか動作確認してみる。どちらでもなかったらどうしよう。

  • エラー

p.147
注意:サブクラスで Error.toString() メソッドをオーバーライドする場合、受け付けるパラメータは ...(残りパラ
メータ)の 1 つだけとします。これは Error.toString() メソッドの仕様として ECMAScript(ECMA-262)Edition 3
言語仕様に定められていることであり、後方互換性を維持するため ActionScript 3.0 もこの形式に準拠しています。した
がって、Error.toString() メソッドをオーバーライドする際は正確にこのパラメータを踏襲する必要があります。ただ
し、実行時に toString() メソッドにパラメータを渡しても無視されるため、パラメータを指定する意味はありません。

ってあったので、実際見てみたけどStandard ECMA-262 ECMAScript Language Specification 3rd edition (December 1999)のp.146の下の方にはそんな風には書いていない。
イベントエラーという仕組みで非同期処理(通信とか)におけるエラーに対応する。2つあって、ErrorEventクラスを継承したものと、netStatus.info.levelかstatus.levelによるステータスに基づくものがある。(なぜ二つに分かれているのか不明。)addEventListenerによってイベントハンドラを設定する。