Flash CS3 ドキュメンテーション |
|||
| ActionScript 2.0 の学習 > ActionScript 2.0 のベストプラクティスとコーディング規則 > ActionScript のコーディング規則 > スコープの扱い > クラス内のスコープについて | |||
ActionScript 2.0 のクラスへコードを移植するとき、場合によっては this キーワードの使い方を変更する必要があります。たとえば、コールバック関数を使用するクラスメソッド (LoadVars クラスの onLoad メソッドなど) では、this キーワードがクラスを指すのか LoadVars オブジェクトを指すのか判断しにくいことがあります。その場合は、次の例のようにして現在のクラスへのポインタを作成します。
class Product {
private var m_products_xml:XML;
// コンストラクタ
// targetXmlStr は XML ファイルへのパスを含む
function Product(targetXmlStr:String) {
/* 現在のクラスへのローカル参照を作成する。
XML の onLoad イベントハンドラ内を実行している場合でも、
XML パケットだけでなく、現在のクラスも参照できる。 */
var thisObj:Product = this;
// ローカル変数を作成する。これは XML のロードに使用する。
var prodXml:XML = new XML();
prodXml.ignoreWhite = true;
prodXml.onLoad = function(success:Boolean) {
if (success) {
/* XML を適切にロードおよび解析できた場合は、
クラスの m_products_xml 変数に、解析した
XML ドキュメントを設定し、init 関数を呼び出す。 */
thisObj.m_products_xml = this;
thisObj.init();
} else {
/* XML ファイルのロードでエラーが発生した。 */
trace("error loading XML");
}
};
// XML ドキュメントのロードを開始する。
prodXml.load(targetXmlStr);
}
public function init():Void {
// XML パケットを表示する。
trace(this.m_products_xml);
}
}
this キーワードは、onLoad ハンドラ内の private メンバー変数を参照することになるので、Product クラスではなく実際には prodXml インスタンスを表します。このため、onLoad ハンドラからクラスを直接参照するには、このようにローカルクラスファイルへのポインタを作成する必要があります。
クラスの詳細については、クラスとスコープについてを参照してください。スコープの詳細については、スコープの扱いを参照してください。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00001112.html