刺身の上にたんぽぽ乗せる日記

プログラミングしたり、自販機の下に落ちてる小銭を集めたりしてます

JavascriptのFunctionオブジェクトのプロパティ

何に使うんだよ、って今まで思ってたけど、
http://blog.livedoor.jp/dankogai/archives/50714622.html
こんなことに使えるのね。

あと、コールバックのキャンセルとかには割と奇麗に使えることに気づいた。

function createCallback(f1, f2) {
 var executed = false;
 var callback = function() {
  if (!executed) {
   f1.apply(null, arguments);
  }
  executed = true;
 }
 callback.cancel = function() {
  if (!executed) {
   f2.apply(null, arguments);
  }
  executed = true;
 }
}

こんな感じでファンクションジェネレータを作って、

var callback = createCallback(onAjaxStuffComplete, doSomeCancelWork);
doSomeAjaxStuff(callback);
setTimeout(function() {callback.cancel();},100);

これでdoSomeAjaxStuffが100msec以内に終わればonAjaxStuffCompleteが呼ばれて、終わらなかったらdoSomeCancelWorkが実行される。
なかなかいいかも。