遅延関数 その2
基本的に
- add
- remove
や
- set
- get
など対にするのがよろしいらしい。
なので元の関数も返せるようにしてみよう。
サンプル
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>Deferred Sample</title> <script type="text/javascript"> Function.prototype.deferred = function(time){ var x = this; var timeout; var args = []; var exec = function() { if(!exec.__cancel){ var o = x.apply(exec, args); clearTimeout(timeout); return o; } } exec.__cancel = false; var func = function(){ for(var i = 0; i < arguments.length;i++){ args.push(arguments[i]); } timeout = setTimeout(exec, time); } func.cancel = function(c){ exec.__cancel = c; clearTimeout(timeout); } func.origin = function(){ return x; } return func; } function test(text1, text2){ alert(text1); alert(text2); } var def = test.deferred(3000); </script> </head> <body> <input type="button" value="ORIGINAL" onclick="def.origin()('hoge1', 'hoge2');"> <input type="button" value="DEFERRED" onclick="def('hoge1', 'hoge2');"> <input type="button" value="CANCEL" onclick="def.cancel(true);"> <input type="button" value="CANCEL_RESET" onclick="def.cancel(false);"> </body> </html>
基本概念は変えず。
origin弁当を返せるようにしておいてみた。
まーあんまし変わらんね。
あとclearTimeoutが怪しいので呼ばれるようにしてみた。
うくく。