[AS3]実行時に未定義のプロパティにアクセスする方法

例えばライブラリから読み込んだSpriteの子Spriteにインスタンス名でアクセスしたいとか。これを普通にライブラリから読み込んだSpriteの子にアクセスしようとして、

//ライブラリからアタッチ
var sp:Sprite = new spriteAttachedFromLibrary() as Sprite;
//子Spriteにアクセス
var spChild:Sprite = sp.spriteAttachedFromLibraryChild;

とすると、
1119: 未定義である可能性が高いプロパティ “インスタンス名” に静的型 flash.display:Sprite の参照を使用してアクセスしています。
と怒られる。

これを回避するためには[]演算子でストリングリテラルを使ってアクセスする。
上記の場合だと、

//ライブラリからアタッチ
var sp:Sprite = new spriteAttachedFromLibrary() as Sprite;
//[]演算子で子Spriteにアクセス
var spChild:Sprite = sp[ "spriteAttachedFromLibraryChild" ];

こうするとエラー回避してアクセスできる。(via 凹村さん、ありがとうございました。)

#追記(09.05.01)
凹村さんに再度コメントいただきました。こういう時はgetChildByNameを使って子Spriteの参照引っ張ってくる方が妥当みたい。もしくはdynamicクラスのMovieClipを継承させて、そのままドットシンタックスでアクセスするか。

ちなみに以前むねごんさんに教えて頂いたんですが、これを応用するとFlashPlayerの上位バージョンで追加された新しいメソッドなども使える。
例えばFP10からFileReferenceに追加されたsaveメソッド、これをFP9までしか描き出せないFlashCS3からも利用できる。

var fr:FileReference = new FileReference();
fr[ "save" ]( byte, name );

書き方はこんな感じ。
ただしこのまま描き出したswfは対応バージョンが9になっているので、このsaveメソッドが実行されるとエラーがでる。なのでバイナリエディタでswfの対応バージョンを9から10に書き換えてやる。やり方はバイナリエディタでswfを開いて、4バイトめの「09」を「0A」に書き換えて保存。こんだけ。これでFlashCS3からもfileReference.saveを使ったローカルファイルアクセスができる。

使用は自己責任でお願いします。