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

据我了解,您在此处指定了要传递给您的事件回调的第二个参数:

this.trigger("change", controller);

jQuery 的 trigger 方法将调用所有绑定的函数,将 Event 对象作为第一个参数(总是)传递,然后,在事件名称之后传递给 .trigger() 方法的所有参数。

于 2012-12-29T07:54:23.997 回答