> 「this」ってどんな場面で使えばいいんでしょうか?
this が示すものが ActionScript3.0 と 2.0以下とでは違うと聞きますから,
それぞれの使い方も変わるとは思いますが,
私は AS3 のことはよくわかりませんので 2.0以下 の例ということで。
◎ this を使用しなければならない例
新規ドキュメントを作成して,
フレーム1 に次のスクリプトをコピペし,
「制御」→「ムービープレビュー」。
--------------------------------------
for (i=0; i<=4; i++) {
this.createTextField("_txt"+i, i, 10, 10+i*30, 0, 0);
this["_txt"+i].text = "ココをクリック!";
this["_txt"+i].autoSize = true;
this["_txt"+i].onSetFocus = function() {
//↓★ this を使用しなければならない
this.text = "クリック完了";
};
}
--------------------------------------
//↓★ this を使用しなければならない
this.text = "クリック完了";
の部分は,
this["_txt"+i].text = "クリック完了";
でも,
_root["_txt"+i].text = "クリック完了";
でも
_parent["_txt"+i].text = "クリック完了";
でも無事に動作しません。
this であるべきです。
現象は少し変わりますが仮に次のようにしても結局同じです。
やはり this であるべきです。
--------------------------------------
for (i=0; i<=4; i++) {
var TF = _root.createTextField("_txt"+i, i, 10, 10+i*30, 0, 0);
TF.text = "ココをクリック!";
TF.autoSize = true;
TF.onSetFocus = function() {
//↓★ this を使用しなければならない
this.text = "クリック完了";
};
}
--------------------------------------
一方,逆の場合もあります。
つまり this が使えない場合もあります。
◎ this を使用できない例
message=abcdefg
というデータをテキストエディタで用意して,
任意のフォルダに,
「data.txt」 というファイル名で保存します。
そのフォルダ内にFlashの新規ドキュメントを保存し,
フレーム1 に次のスクリプトをコピペし,
「制御」→「ムービープレビュー」。
--------------------------------------
// _root に インスタンス名_txt のテキストフィールドを作成
_root.createTextField("_txt", 0, 20, 30, 0, 0);
// テキストフィールドを自動サイズにする
_txt.autoSize = true;
// ---
// LV という LoadVarsインスタンスを作成
var LV = new LoadVars();
// ロード完了時の動作
LV.onLoad = function() {
// ↓★this の使用は不可
_txt.text = LV.message;
};
LV.load("data.txt");
--------------------------------------
// ↓★this の使用は不可
_txt.text = LV.message;
の部分は,
this._txt.text = LV.message;
でも
this._parent._txt.text = LV.message;
でも無事に動作しません。
this は使えません。
一方 _root は使えますから,
_root._txt.text = LV.message;
は大丈夫です。
上の this でなければならない例と,
下の this は使用できない例の2例を書きました。
もしかしたら,なぜそうなのかよくわからないかもしれません。
しかし良く考えたり,調べると,
なぜ上のような現象が起こるのかがわかります。
簡単に触りだけの理由を書くと,
上の例は 「i が変動するから」 です。
下の例は 「LoadVarsインスタンス はオブジェクトではあってもムービークリップではないから」 です。
this を使ったときの格好というよりも,
使うときは this が何を指すのかを常に意識して使った方が良いです。
this を使わなければならない場合は当然使いますし,
どっちでも良い場合は理論上どちらが相応しいかで決めます。
どちらが相応しいかは周りのスクリプトによって決まる場合も多々あります。
お礼
なるほど。とても興味深いです。 thisを使えない場合、thisしか使えない場合、面白いですね。 ありがとうございました。