[javascript][æç²]Function.prototype.*
javascriptã¯Function.prototypeã«è¿½å ããã¡ã½ããã§å ã®é¢æ°ã®æåã夿´ãããã¨ãã§ããã
later
最速インターフェース研究会 :: Function.prototypeを拡張して遅延実行を実現する
颿°ã®å®è¡ãæå®æéå¾ã«è¡ãªãã
var func = function(v){alert(v)}; func.later(1000)("1ç§å¾ã«è¦å"); func.later(2000)("2ç§å¾ã«è¦å"); func.later(1000).later(2000)("3ç§å¾ã«è¦å"); (function(v){alert(v);arguments.callee.later(1000)(v)}).later(1000)("1ç§ãã¨ã«å®è¡")
callTimeout, callInterval
Kazuho@Cybozu Labs: setTimeout をオブジェクト指向にしてみる
foo.bar.callTimeout(1000, foo, hoge); foo.bar.applyTimeout(1000, foo, [ hoge ]); // ããã§ã OK foo.bar.callInterval(1000, foo, hoge); // setInterval ç foo.bar.applyInterval(1000, foo, [ hoge ]); // setInterval & apply ç
laterã«ä¼¼ã¦ããããæéã«å ãã¦self, 弿°ãæ¡å¼µé¢æ°å´ã§æå®ãã¦ãã¾ããã¾ããsetIntervalçãã
later(cancel, complete, notify)
*「ふっかつのじゅもんがちがいます。」 - もっとエレガントにsetTimeoutをメソッド化する方法
function example(msg){ alert(msg); } //ããã //é å»¶å®è¡ var task = example.later(1000)('hello'); //ããã //ãã£ã³ã»ã« task.cancel(); //ããã //ã¾ã å®è¡ãã¦ãªãã£ããããã£ã±ãå³å®è¡ if(!task.complete){ task.notify(); }
ldrã®laterã¯ãã£ã³ã»ã«ããã¥ã¼ã¤ã³ã°ãããã¾ã¾æªå®è¡é¢æ°ã®ä»»æã¿ã¤ãã³ã°ã§ã®å®è¡å¯è½ã
asyncronous
putData.asynchronize()(function(result) { if (result == 'ok') { .... } });
asynchronizeãã颿°çµäºæç¹ã§ãå¦çå®è¡ãasynchronize対象å¦çã¨é¢ä¿ãªãå¦çã§ããã°ãããããã³ã°ãããã«å¦çãç¶ç¶ã§ããã
benchmark
testfunction = testfunction.bench("å®è¡æéã¯"); //è¨å® testfunction(go); // å®è¡
éãå¦çã®æ¸¬å®ã«ã
defaults
parentNode.org ≫ Default Arguments in JavaScript Functions
var bar = function(a, b) { }.defaults('default_b'); bar(); // a = undefined, b = 'default_b' bar(1); // a = 1, b = 'default_b' bar(1, 'some_value'); // a = 1, b = 'some_value'
javascriptã¯ããã©ã«ã弿°ãæå®ã§ããªãããprototypeæ¡å¼µãããã¨ã§å¯è½ã«ã
cached
koyachiの日記 - Function.prototype.cached
function search(search_word, page_no) { //... } var cached_search = search.cached_by_arguments(2, 2); result = cached_search("foo bar", 1);
åã弿°ã§éå»ã«è¨ç®ãã¦ããã°ãæå¾ã«è¨ç®ããçµæãåç §ã