Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2007-12-10狂信

イベントハンドラを関数チェインとして書く

| 01:21 |  イベントハンドラを関数チェインとして書く - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  イベントハンドラを関数チェインとして書く - Ci.nsIZIGOROu

苦手なので試してみた。

元ネタ

window.onload = (function (chain) { return function () { chain && chain(); 実際の処理 }; })(window.onload) とか書くのが window.onload の正しい使い方よね Twitter / Kazuho Oku: window.onload = (function (...

へー、と今朝思ってから後でやろうと思ってたので試した。

動作サンプル

ソース抜粋

function addEventChain(element, eventName, chain) {
  element["on" + eventName] = (function(handler) { 
    return function(evt) {
      if (!evt)
        evt = window.event;
      if (handler && handler(evt))
        ;
      return chain(evt);
    };
  })(element["on" + eventName]);
};

window.onload = function() {
  var trigger = document.getElementById("trigger");
  addEventChain(trigger, "mouseover", function(evt) { alert("a"); });
  addEventChain(trigger, "mouseover", function(evt) { alert("b"); });
  addEventChain(trigger, "mouseover", function(evt) { alert("c"); });
  addEventChain(trigger, "mouseover", function(evt) { alert("d"); });
};

考え方

  • 左辺値はFunctionオブジェクトを受け付ける訳だから最終的に関数を返せば良い
  • 引数は先に突っ込んだチェイン達
  • 先に突っ込んだチェイン達を当然先に実行
  • 追加するチェインを実行

ってのをやっていけば良いって事か。

どうもこういうの苦手だなぁ。

追記

  • returnが抜けてた><

ElizaEliza2011/08/07 06:14Thanks for wiritng such an easy-to-understand article on this topic.

pvzxsbabqzpvzxsbabqz2011/08/07 21:06H46viX <a href="http://kdptueqmksia.com/">kdptueqmksia</a>

aurfopaurfop2011/08/08 01:00juZ8Ap , [url=http://ysuuqjmdajhh.com/]ysuuqjmdajhh[/url], [link=http://hfakdpijeukn.com/]hfakdpijeukn[/link], http://hyqwenboozsy.com/

ufvvucgrufvvucgr2011/08/13 01:34XvY3yO , [url=http://blziwynxsvnf.com/]blziwynxsvnf[/url], [link=http://kogfyheyqgso.com/]kogfyheyqgso[/link], http://hbehjagpuiwj.com/

AxamalAxamal2012/12/16 03:26Check that off the list of things I was confseud about.

lwqvcqbnklwqvcqbnk2012/12/16 19:07Z4ZVmg <a href="http://lyejezfvsdjd.com/">lyejezfvsdjd</a>

gsvgpszfzgsvgpszfz2012/12/18 12:01m5Szla , [url=http://npznnktohald.com/]npznnktohald[/url], [link=http://dzkpwyyhrsvy.com/]dzkpwyyhrsvy[/link], http://yuafgttvnzwe.com/

oihtrctdkoihtrctdk2012/12/21 08:33AoQraP , [url=http://lfjuqgktdfyv.com/]lfjuqgktdfyv[/url], [link=http://datwobhntvnt.com/]datwobhntvnt[/link], http://szsufsjgdsod.com/

eobfkubeobfkub2012/12/21 08:33aOiFTd , [url=http://muljfkztcoor.com/]muljfkztcoor[/url], [link=http://wkqytvadibis.com/]wkqytvadibis[/link], http://omtrcbrvgtgp.com/