実行を制御できる関数を作る
状態管理のサンプルでちょっと作ってみたお。
難しく考えないで適当に。
Function.prototyperッスから!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>Trigger</title> <script type="text/javascript"> var Trigger = { obj : {}, setTrigger : function(id, trigger){ if(!this.obj[id]){ this.obj[id] = []; } this.obj[id].push(trigger); }, fire : function(id){ var arr = this.obj[id]; for(var i = 0; i < arr.length; i++){ arr[i](); } } } Function.prototype.triggered = function(id){ var x = this; var func = function() { if(func.__able){ var args = []; for(var i = 0; i < arguments.length;i++){ args.push(arguments[i]); } return x.apply(func, args); } } func.prototype.__able = false; func.enable = function(c){ func.__able = c; } if(id){ Trigger.setTrigger(id, func); } return func; } function fired(text){ alert(text); } var lockFired = fired.triggered(); function lock(){ lockFired.enable(false); } function unlock(){ lockFired.enable(true); } function group1(){ alert("text:1"); } function group2(){ alert("text:2"); } group1 = group1.triggered('group1'); group1.enable(true); group2 = group2.triggered('group1'); group2.enable(true); </script> </head> <body> <input type="button" value="execute" onclick="lockFired('test')"> <input type="button" value="lock" onclick="lock();"> <input type="button" value="unlock" onclick="unlock();"> <input type="button" value="executeGroup" onclick="Trigger.fire('group1');"> </body> </html>
実行できなくしたりできます。
(デフォルトで実行できないッス)
groupingもできますよ。
引き数はbindなどで埋め込んでる状態が前提な呼び出しかたですけどね。
土台はこんなイメージだなあ。
んー実行回数カウンタや状態(一回は呼ばれたかどうか)もたぶん同じように持てると思う。
参考にならなかった人はコメント下さい。
うくく。