トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     withステートメントのスコープチェーン
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
chillout
Åê¹ÆNo.38439
投稿日時: 2008-4-14 20:37
新米
居住地:
投稿: 8
使用環境:
MacOSX10.4, Flash CS3
withステートメントのスコープチェーン
withステートメントについて質問です。
以下のスクリプトは、
Objectインスタンスのプロパティ'a'の値である2が
出力されることを期待していますが、
実際には1が出力されます。


package
{
import flash.display.Sprite;
public class Main extends Sprite
{
public function Main ()
{
var a : int = 1;
var obj : Object = {a:2};
with(obj)
{
trace(a);
}
}
}
}


// output
// 1



リファレンスによると、
引用:
識別子を解決するために with ステートメントで使用されるスコープチェーンは、次のリストの最初の項目から始まり、最後の項目まで続きます。

最も内側の with ステートメントの object パラメータで指定されたオブジェクト
最も外側の with ステートメントの object パラメータで指定されたオブジェクト
Activation オブジェクト (スクリプトが関数内で呼び出されたローカル変数を持つ関数を呼び出すときに自動的に作成されるテンポラリオブジェクト)
実行中のスクリプトを含むオブジェクト
Global オブジェクト (Math や String などの定義済みオブジェクト)



となっていて、
アクティベーションオブジェクトより先に、
withステートメントに渡したobjのスコープで
aが解決されるはずですが、
実際は、アクティベーションオブジェクトのスコープで
解決されているように見えます。

これは、リファレンスの誤りでしょうか?
それとも、何か勘違いをしているのでしょうか?
野中文雄
Åê¹ÆNo.38440
投稿日時: 2008-4-14 22:15
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: withステートメントのスコープチェーン
バグだと判断します。かねてより、withステートメントの使用は、お勧めしてはいませんでした。しかし、現行Flash Player 9/ActionScript 3.0については、使用禁止とするよう警告します。
package {
	public class Test {
		private var length:int = 100;
		public function Test() {
			// var length:int = 10;
			var _array:Array = new Array();
			trace(_array.length);  // 出力: 0
			with (_array) {
				trace(length);  // 出力: 100;
				trace(push(0));  // 出力: 1000;
			}
		}
		private function push(n:int):int {
			return 1000;
		}
	}
}


----------------
 

chillout
Åê¹ÆNo.38443
投稿日時: 2008-4-14 22:40
新米
居住地:
投稿: 8
使用環境:
MacOSX10.4, Flash CS3
Re: withステートメントのスコープチェーン
バグですか。

普段はwithステートメントを使用することはないのですが、
スコープチェーンやファンクションクロージャの理解を深めるために
いろいろ試してみたところ、上記の問題ではまっていました。

これですっきりしました。
ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops