[AS][?→ok]スコープがよくわからない・・・
スコープがあってないと思うのだけど理屈がよくわからない・・・
例えば、こんなカスタムイベントはOK
(ステージに_mc1インスタンスを配置)
//////////
//フレームアクション
import mx.events.EventDispatcher;
import mx.utils.Delegate;
var frog1:Object = new Object();
EventDispatcher.initialize(frog1);
function passPoint(eventObj:Object):Void {
trace(eventObj.child);
}
frog1.addEventListener("passPoint",this);
_mc1.onRelease = function() {
trace("on");
trace("this;"+this);
var testObj:test2 = new test2(frog1);
};
//////////
//カスタムクラス(test2.as)
class test2 {
var childID = 300;
var frog1:Object;
public function test2(frog1) {
this.frog1 = frog1;
tat();
}
function tat() {
frog1.dispatchEvent({type:"passPoint", child:childID});
}
}
//////////
でもこれを以下のようにフレームアクションを変えるとイベントが受信できない。
//////////
import mx.events.EventDispatcher;
import mx.utils.Delegate;
var frog1:Object = new Object();
EventDispatcher.initialize(frog1);
_mc1.onRollOver = Delegate.create(this, testOver);
function testOver() {
trace("this:"+this);
function passPoint(eventObj:Object):Void {
trace(eventObj.child);
}
frog1.addEventListener("passPoint",this);
};
_mc1.onRelease = function() {
trace("on");
trace("this;"+this);
var testObj:test2 = new test2(frog1);
};
function testOverは委譲しているので、this参照は_lovel0になっているのに。
・・・何か別の問題があるのだろうか?
/////////////////////////////////////
12/5 追記
理解しました。
function内にfunctionが入っているとそれはローカル変数的なfunctionになるのだそう。
(passPointがtestOverに含まれてしまっているということ)
this参照が_lovel0でもグローバル的な関数にはなりえないってことらしい。
つまり・・・
////////////////////////
//これはtraceできないけど。。。
var test:Function;
function main(){
//test = test();
function test(){
trace("a");
};
}
main();
test();
////////////////////////
//これならできる、みたいな
var test:Function;
function main(){
test = test();
function test(){
trace("a");
};
}
main();
test();
Tweet