我有这个代码在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函数中的控制器参数。你能告诉我这个参数来自哪里吗?
谢谢。
答案 0 :(得分:1)
据我了解,你在这里指定了第二个参数传递给你的事件回调:
this.trigger("change", controller);
jQuery的触发器方法将调用所有绑定函数,将Event对象作为第一个参数(总是)传递,然后在它之后传递给事件名称之后传递给.trigger()方法的所有参数。