0

javascriptアプリケーションの観点から「ステートマシン」を設定するための次のコードがあります。

    var Events = {
      bind: function(){
        if ( !this.o ) this.o = $({});
            this.o.bind(arguments[0], arguments[1])
      },

      trigger: function(){
        if ( !this.o ) this.o = $({});
            this.o.trigger(arguments[0], arguments[1])
      }
    };

    var StateMachine = function(){};
    StateMachine.fn  = StateMachine.prototype;
    $.extend(StateMachine.fn, Events);

    StateMachine.fn.add = function(controller){
      this.bind("change", function(e, current){
        console.log(current);
        if (controller == current)
          controller.activate();
        else
          controller.deactivate();
      });

      controller.active = $.proxy(function(){
        this.trigger("change", controller);
      }, this);
    };

    var con1 = {
      activate: function(){ 
        console.log("controller 1 activated");
      },
      deactivate: function(){ 
        console.log("controller 1 deactivated");
      }
    };

    var sm = new StateMachine;
    sm.add(con1);        
    con1.active();

この時点で私が理解していないのは、バインド関数の現在のパラメーターがどこから来ているかです(つまり:) 。これをfirebugコンソールパネルに記録しようとしましたが、StateMachine.fn.add関数のコントローラーパラメーターのようです。このパラメータの由来を教えてください。ありがとうございました。this.bind("change", function(e, current){...}

4

1 に答える 1

1

私が理解している限り、ここでイベントコールバックに渡される2番目の引数を指定しました。

this.trigger("change", controller);

jQueryのtriggerメソッドは、バインドされたすべての関数を呼び出し、Eventオブジェクトを(常に)最初の引数として渡し、その後、イベント名の後に.trigger()メソッドに渡したすべての引数を渡します。

于 2012-12-29T07:54:23.997 に答える