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){...}