Macromedia Flash非公式テクニカルノート

スコープチェーン

ID: FN0203003 Product: Flash

Platform: All
Version: MX

Macromedia Flash Player 6は、スコープチェーンの概念を採用することになりました(ECMA-262仕様に準拠します)。これは、厳密なスコープというものが存在しなかったFlash Player 5からの大きな飛躍になります。

スコープチェーンは、ActionScriptオブジェクトのリストです。識別子を分析するに際しては、ActionScriptはスコープチェーンの最後の要素から遡って、識別子を検索していきます。

標準的なActionScriptでは、スコープチェーンは以下のようになります。

・グローバル変数
・包含するMovieClipオブジェクト
・ローカル変数

'with'アクションは、暫定的にオブジェクトをスコープチェーンの最後に追加します。'with'アクションの実行が終了すると、暫定オブジェクトはスコープチェーンから削除されます。

'function'が定義されると、現行のスコープチェーンはコピーされてfunctionオブジェクトに保存されます。'function'が呼出されると、スコープチェーンはそのfunctionオブジェクトのスコープチェーンに切り替わり、新規のローカル変数オブジェクトがその最後に追加されます。

Macromedia Flash 5では、ActionScriptの'function'のスコープは、つねにつぎのようなものでした。

・グローバル変数
・'function'の設定されたムービークリップ
・ローカル変数

スコープリストは、3要素を超えることはありません。ただし、'with'アクションが使用された場合を、除きます。これは、ECMA-262仕様とは異なるものでした。その結果として、メソッドのスコープはそれが設定されたMovieClipにあり、メソッドの定義された場所ではありませんでした。

Macromedia Flash Player 6では、MovieClipのメソッドをそのMovieClipの外部で定義すれば、メソッドのスコープチェーンはその外部オブジェクトを対象とし、MovieClipオブジェクトを含むことはありません。このため重要になるのが、'this'キーワードをメソッド本文で使用するということです。

ただし、従来との互換性はMacromedia Flash 5コンテンツについて保持されていることにご注意ください。Macromedia Flash 5では、スコープについてFlash 5 Playerで適用されていたのと同様の原則が使用されます。

出典
ActionScript Coding Standards「Scope」の項を邦訳。

_____

作成者: 野中文雄
作成日: 2002年3月30日


Copyright © 2001 and beyond Fumio Nonaka All rights reserved.