绑定回调参数

时间:2012-12-29 06:04:43

标签: javascript jquery

我有这个代码在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();

此时我不明白的是 bind 函数中的当前参数来自(即this.bind("change", function(e, current){...})。我尝试在firebug控制台面板上记录它,它似乎是StateMachine.fn.add函数中的控制器参数。你能告诉我这个参数来自哪里吗? 谢谢。

1 个答案:

答案 0 :(得分:1)

据我了解,你在这里指定了第二个参数传递给你的事件回调:

this.trigger("change", controller);

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