[AS]functionの中のfunctionのthisについての注意
関数の中に関数を入れた場合(関数クロージャというらしい)、中の関数でのthisの扱いには注意が必要。
例えば。。。
//フレームアクション
function main(){
trace(this);
//mc赤い四角定義
var mc = new MovieClip();
mc.graphics.beginFill(0xFF0000);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();
sub();
//関数クロージャ(たぶん)
function sub(){
trace(this);
addChild(mc);
}
}
main();
上記を実行すると100×100の赤い四角がx:0,y:0の位置に表示される。
ここで注意したいのが、function subの中のaddChild(mc);
これは本来の文法的にはDisplayObjectContainer.addChild(mc)
DisplayObjectContainerが記載されてないから、thisになるのか、
と思うとそうでもない。。。
this.addChild(mc)
これはエラーになります。
finction sub()のthisと、function main()のthisはtrace結果を見ると違うものです。
よって、関数クロージャのaddChild(~)は、thisが省略されてるわけではないってことで。
※この例では”メインのタイムライン”になっているみたい。(フレームアクションなので)
Tweet