Flash CS3 ドキュメンテーション |
|||
| ActionScript 2.0 リファレンスガイド > ActionScript 言語エレメント > ステートメント > with ステートメント | |||
with (object:Object) {
statement(s);
}
object パラメータでムービークリップなどのオブジェクトを指定し、そのオブジェクト内の式やアクションを statement(s) パラメータで評価できるようにします。これにより、オブジェクトの名前やパスをオブジェクトに繰り返し書き込む必要がなくなります。
object パラメータは、statement(s) パラメータのプロパティ、変数、および関数を読み取るときのコンテキストになります。たとえば、object が my_array であり、指定されたプロパティのうちの 2 つが length と concat である場合、これらのプロパティは my_array として自動的に読み取られます。length および my_array.concat です。別の例で、object が state.california である場合、with ステートメント内のアクションまたはステートメントは california インスタンス内から呼び出されます。
statement(s) パラメータで識別子の値を検索する場合、ActionScript は object で指定されたスコープチェーンの先頭から開始し、特定の順序でスコープチェーンの各レベルで識別子を検索します。
識別子を解決するために with ステートメントで使用されるスコープチェーンは、次のようにリストの最初の項目から始まり、最後の項目まで続きます。
with ステートメントで、object パラメータで指定されたオブジェクト。with ステートメント内の object パラメータで指定されたオブジェクト。with ステートメント内に変数を設定するには、with ステートメントの外側で変数を宣言しておくか、変数を設定するタイムラインへのフルパスを入力する必要があります。変数を宣言せずに with ステートメントに設定すると、with ステートメントはスコープチェーンに従って値を検索します。変数がまだ存在しない場合、with ステートメントが呼び出されたタイムライン上に新しい値が設定されます。
with() を使用する代わりに、直接パスを使用することができます。パスが長く、入力が面倒な場合は、ローカル変数を作成してパスを格納しておき、コード内でその変数を再利用することができます。次の ActionScript に例を示します。
var shortcut = this._parent._parent.name_txt; shortcut.text = "Hank"; shortcut.autoSize = true;
対応バージョン : ActionScript 1.0、Flash Player 5
object:Object - ActionScript オブジェクトまたはムービークリップのインスタンス。
次の例では、someOther_mc インスタンスの _x プロパティと _y プロパティを設定してから、フレーム 3 に進んで停止するように someOther_mc に指示します。
with (someOther_mc) {
_x = 50;
_y = 100;
gotoAndStop(3);
}
次のコードの抜粋では、with ステートメントを使用しないで上記コードを記述する方法を示します。
someOther_mc._x = 50; someOther_mc._y = 100; someOther_mc.gotoAndStop(3);
with ステートメントは、スコープチェーンリスト内の複数の項目に同時にアクセスする場合に便利です。次の例では、ビルトインの Math オブジェクトをスコープチェーンの前に設定します。Math をデフォルトオブジェクトとして設定すると、cos、sin、PI の各識別子がそれぞれ Math.cos、Math.sin、Math.PI というように解決されます。a、x、y、r の各識別子は Math オブジェクトのメソッドやプロパティではありませんが、関数 polar() のオブジェクトアクティベーションスコープ内に存在するので、それぞれ対応するローカル変数として処理されます。
function polar(r:Number):Void {
var a:Number, x:Number, y:Number;
with (Math) {
a = PI * pow(r, 2);
x = r * cos(PI);
y = r * sin(PI / 2);
}
trace("area = " + a);
trace("x = " + x);
trace("y = " + y);
} polar(3);
次の結果が [出力] パネルに表示されます。
area = 28.2743338823081 x = -3 y = 3
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00001343.html