bindAsEventListener 改

JavaScriptではラムダがガンガン使えるけど、イベントハンドラから呼び出される関数のコンテキストthisには必ずイベントオブジェクトが入るためにOOしにくい。くそ。
これを解決するのにprototypeにbindAsEventListenerがあるけど値を戻せない。

Function.prototype.bindAsEventListenerEx = function(object) {
  var __method = this;
  return function(event){
    event = event || window.event;
    var target = event.target || event.srcElement
    var retval = __method.apply(object, [target, event]);
    if (typeof(retval) != 'undefined' && !retval){
      if (document.all){
        event.returnValue = false;
      } else if (event.preventDefault){
        event.preventDefault();
      }
      return false;
    }
  }
};

オブジェクトの中で、

var target = document.getElementsById('sample');
target.onclick = function(target, event){
    alert( target );
}.bindAsEventListenerEx(this);

とかする。