javascriptってこんな事できるんだ。。。

javascriptのメソッドって動的に自分自身で書き換える事が出来るのかなー。
とふと思い、気になったので書いてみた。

var foo = {
 alert: function(num) {
alert("Hello !!");
this.alert = function(num) {
alert("World");
alert(num);
}
 }
};



foo.alert(1);
foo.alert(2);
foo.alert(3);

/******* 結果 ******/
Hello
World
2
World
3
********************/

おお!!出来た!

ということは、

var foo = {
  init:function(){
    this.loadEvent(null);
  },
  loadEvent:function(handler){
    if (window.attachEvent){
  this.loadEvent = function(handler){
      window.attachEvent("onload",handler);
  };
} else {
  this.loadEvent = function(handler){
      window.addEventListener("load",handler,false);
                  
};
       
   }

       }
};
foo.init();

foo.loadEvent(function(){alert("load1");});
foo.loadEvent(function(){alert("load2");});
foo.loadEvent(function(){alert("load3");});

の用にブラウザの差異によるif文のオーバーヘッドを1回に出来るメソッドが書ける。
ブラウザの差異をチェックする条件式が複雑、多い場合は有効。。。なのかな?