Home > Progression > addCommand内でのfunctionについて雑感

addCommand内でのfunctionについて雑感

Progressionでタイムラインスタイルを使っていて、のaddCommand内で、たとえばこう書いたときの話。
やってることは、p1というシーンを表示したときにp1ページ内のボタンの処理を追加しているんですが、問題はここでの「function()」の使い方。

var p1:SceneObject =new SceneObject()
p1.name ="p1"
p1.onInit =function():void{
  this.addCommand(
    new AddChild(prog.container.p1Page),
    function(){
      p1Page._page.btn.addEventListener(MouseEvent.MOUSE_DOWN,function(){
        prog.goto(new SceneId("/index/p2"))
        //本当はここでif使って、条件によって飛ばすシーンを変えてる
    }
  );
}

p1.onGoto =function():void{
  this.addCommand(
      p1Page._page.btn.removeEventListener(MouseEvent.MOUSE_DOWN,arguments.callee);
  );
}

addCommand内のfunctionは、無名関数っつーか、関数リテラルとして実行される、と考えると納得できる。こういうのはその場で1回実行される(言い方はわからないけど、クロージャっていうの?)と理解してるんだけど。

javascriptでいう関数リテラルはこんな感じ。↓

(function(v)
  {alert(v)}("aho")
);

これだと、jsはすぐに実行されて、画面にアラートが出ます。

今日の発見

  • addCommand内のfunctionは関数リテラル
  • 無名関数でaddEventListenerしたときは、arguments.calleeでremoveできる

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://ryow.net/mt/mt-tb.cgi/395
Listed below are links to weblogs that reference
addCommand内でのfunctionについて雑感 from ryow.net Blog

Home > Progression > addCommand内でのfunctionについて雑感

About

りょうどっとねっとブログ

Twitter :ryownet

はてな :ryownet

Search

Return to page top