人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

FlashのActionScriptについて質問です。

(1)変数について
http://oshige.com/flash/note/archives/3_actionscript/33_/
ここに書いてあるローカル変数は、varを付けなければいけないそうです。(タイムライン変数はvarを省略可能と明記あり)
では、varを付け忘れたらどういう動作になるのでしょうか?

(2)thisについて
function example() {this}
上のように、functionの中にあるthisは何を指すんでしょうか?
example()を呼び出したムービクリップでしょうか?
また、function example()がカスタムクラス内に定義されている場合、thisの扱いは変わりますか?

●質問者: router
●カテゴリ:コンピュータ
✍キーワード:ActionScript FLASH カスタム クラス クリップ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● jouno
●50ポイント

http://graphicker.jp/flextime/script/05.html

varをつけないとグローバルスコープになります。


つまり、関数定義の外に同名の変数が存在した場合、関数内でvarで初期化した場合は、関数内でその変数に代入しても、関数の外の同名の元からあった変数は別の変数として扱われ、影響を受けません。


var a=”hello”;

function func(){ a=”nice”;}

func();

trace(a);

と、


var a=”hello”;

function func(){var a=”nice”;}

func();

trace(a);

との結果の違いです。前者のaは同じaですが、後者のaは二種類あります。


thisについては、関数の外では、flashの階層構造で、そのスクリプトが属しているオブジェクトです。タイムラインなら_rootです。

http://hima.chu.jp/flash/tips/whatisthis.htm

ここのthisは何をさしているのか

こちらも参照。


で関数の中の場合、その関数が、オブジェクトのコンストラクタとして使用された場合は、そのあたらしくつくられたオブジェクト自身を指します。


つまり、

example();

のときは関数の外でつかったthisと同じですが、

a = new example();

としたときは、exampleをコンストラクタとするオブジェクトaです。


どちらになるかは定義時点ではなくて関数の実行時に決まります。


クラスの中で、関数(メソッド)としてつかった場合は、そのクラスのインスタンスがメソッドの呼び出し元なので、thisになります。


手元の環境がparaflaなのでclassベースの文法の新しいバージョンだとちょっと違うかもしれませんが、だいたいこんな感じです。

http://www.interq.or.jp/student/exeal/dss/mozilla_translation/js...

こちらも。

◎質問者からの返答

ご回答ありがとう御座います。


2 ● hal-u
●5ポイント

http://oshige.com/flash/note/archives/3_actionscript/33_/

Flash ActionScript入門ノート: 3.3 変数

(1)変数について

のリンク先にある説明の中ほどに以下のような記述があります。


「この例において、functionブロック内で変数vをvarステートメントで宣言せずに使うと変数vはタイムライン変数になってしまい、1行目の変数vの値を上書きしてしまいます。結果として、出力パネルにはどちらの値も15で書き出されます。

このことから、functionブロック内の変数をvarでローカル変数宣言するのとしないとでは、大きな違いがあることがわかります。」


つまり、varをつけ忘れても、他に同じ名前の変数が無ければ、別に何も変わらないし、重なっていれば問題が起こることもありえます。


(2)についてはわかりづらいのですが、クラス内での定義であれば、当然扱いは変わります。

◎質問者からの返答

ご回答ありがとう御座います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ