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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     AS3.0の配列アクセス演算子の仕様について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
joyko
Åê¹ÆNo.43672
投稿日時: 2009-10-10 17:00
常連
居住地: 埼玉県
投稿: 165
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
AS3.0の配列アクセス演算子の仕様について
皆さん、いつも、お世話になってます。配列アクセス演算子に関して、
AS2.0とAS3.0の違いに関しての、質問です。以下、比較した結果です。

//as2.0のケース
for(var i:Number=1;i<5;i++){
	this["n"+i]=i;
}
trace(n1+n2+n3+n4);//1+2+3+4=10となる

/*as3.0で、as2.0と同様に、thisをメインタイムラインとして、
記載したケース*/
for(var i:uint=1;i<5;i++){
	this["n"+i]=i;
}
trace(n1+n2+n3+n4);//1120:未定義のプロパティ n1、n2、n3、n4へのアクセスです。

/*as3.0で、MovieClip(静的クラスのSpriteでは不可)を生成して、
そこに、Arrayインスタンスを作成すると、as2.0と同様のことができる*/
var mc:MovieClip=new MovieClip();
for(var i:uint=1;i<5;i++){
	mc["n"+i]=i;
}
trace(mc.n1+mc.n2+mc.n3+mc.n4);//1+2+3+4=10となる


as3.0では、this[ ]という、メインタイムラインをtargetと
した、配列アクセス演算子は、仕様外ということなのでしょうか?
お教え頂けると、助かります。
ひろゆき
Åê¹ÆNo.43673
投稿日時: 2009-10-10 17:27
ちょんまげら
居住地: 大阪密林
投稿: 3492
使用環境:
10.3.9
Flex 2 SDK

Pro8.0
Pro7.2
FlashPlayer
7.0r24/8.0r24/9.0r115
Safari 1.3.2
Firefox 2.0.0.20

MacOS 9.2.2
Flash 4/5
Re: AS3.0の配列アクセス演算子の仕様について
配列アクセス演算子は無関係のように思います。

プロパティの扱いが、dynamicなクラスか否かで、異なることと同じように思います。


----------------
質問する際は、回答者に具体的な情報を与えてくださいなのニャ!

joyko
Åê¹ÆNo.43674
投稿日時: 2009-10-10 18:55
常連
居住地: 埼玉県
投稿: 165
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: AS3.0の配列アクセス演算子の仕様について
ひろゆきさん、
返信ありがとうございます。
以下のようにして、thisを、MovieClipにCastしてみたら、正常稼働しました。

for(var i:uint=1;i<5;i++){
	MovieClip(this)["n"+i]=i;
}
trace(this.n1+this.n2+this.n3+this.n4);//10となる


どうも、dynamicクラスをtargetにしないと、配列アクセス演算子のインスタンスが生成されないようです。
野中文雄
Åê¹ÆNo.43675
投稿日時: 2009-10-10 19:17
ちょんまげら
居住地: 東京
投稿: 4166
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: AS3.0の配列アクセス演算子の仕様について
[1] 変数にvar宣言がされていないためでしょう。
/*as3.0で、as2.0と同様に、thisをメインタイムラインとして、
記載したケース*/
var n1:uint;
var n2:uint;
var n3:uint;
var n4:uint;
for (var i:uint = 1; i < 5; i++) {
	this["n" + i] = i;
}
trace(n1 + n2 + n3 + n4);


[2] あるいは、値を取得するときも、配列アクセス演算子[]を使うべきです。
for (var i:uint = 1; i < 5; i++) {
	this["n" + i] = i;
}
// trace(n1 + n2 + n3 + n4);
// 1120:未定義のプロパティ n1、n2、n3、n4へのアクセスです。
trace(this["n1"] + this["n2"] + this["n3"] + this["n4"]);


[3] ドット演算子(.)で替えることもできるようです。
for (var i:uint = 1; i < 5; i++) {
	// MovieClip(this)["n"+i]=i;
	this["n" + i] = i;
}
trace(this.n1 + this.n2 + this.n3 + this.n4);  // 10となる


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

joyko
Åê¹ÆNo.43677
投稿日時: 2009-10-10 23:24
常連
居住地: 埼玉県
投稿: 165
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: AS3.0の配列アクセス演算子の仕様について
野中さん、
早速のご回答、ありがとうございます。
AS2.0と違って、変数の定義宣言が必要だということが分かりました。
ひとつ、勉強になりました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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