[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