ActionScript 3.0では、import指示子の使い方が、ActionScript 2.0と変わりました。
まず、ActionScript 2.0におけるimport指示子の使い方です。
importステートメントを記述すれば、スクリプト中でクラス名だけを指定して、クラスが参照できます。しかし、import指示子を使わなくても、完全修飾クラス名を使えば、クラスを参照することは可能です(スクリプト001)。
パッケージ内のクラスを、importステートメントも完全修飾クラス名も使わずにアクセスしようとすれば、コンパイルエラーが発生します。
スクリプト001■ActionScript 2.0におけるimport
// ActionScript 2.0クラス定義
import flash.filters.BlurFilter;
class Test20 {
function Test20() {
// クラス名のみでアクセス
trace(BlurFilter); // 出力: [type Function]
// 完全修飾クラス名で参照
trace(flash.filters.BlurFilter); // 出力: [type Function]
// クラス名のみでアクセス
// trace(DropShadowFilter); // コンパイルエラー
// 完全修飾クラス名で参照
trace(flash.filters.DropShadowFilter); // 出力: [type Function]
}
}
ActionScript 3.0では、パッケージに定義されたクラスを参照する際には、必ずimportステートメントを記述する必要があります。たとえ完全修飾クラス名で参照しても、importステートメントがなければReferenceErrorになります(スクリプト002)。
スクリプト002■ActionScript 3.0におけるimport
// ActionScript 3.0クラス定義
package {
// importステートメントが必須
// import flash.filters.BlurFilter;
public class Test30 {
function Test30() {
trace(flash.filters.BlurFilter); // ReferenceError
}
}
}
他方で、Flash 9のタイムラインからは、importステートメントどころか、完全修飾名を使わないクラス名だけで参照ができてしまいます(スクリプト003)。
スクリプト003■Flash 9のタイムラインからクラスの参照
// フレームアクション
trace(BlurFilter); // Output: [class BlurFilter]
「これは、Flashのタイムラインには、デフォルトで必要なクラスが自動的にimportされるためです」(「import指示子」の[訳者注*1])。以前のバージョンのユーザーがFlash 9に移行して、とまどわないための対応策だと思われます。