var a = {
  fun: function(e) {
    alert(e);
    alert(this);
  }
}
window.addEventListener('load', a.fun, false);   //chrome下弹出[object Event] 和 [object DOMwindow]window.addEventListener('load', a.fun(), false); //chrome下弹出undefined 和 [object object]是不是第一种属于函数调用模式,第二种属于方法调用模式
为什么会有这种差别呢?

解决方案 »

  1.   

    window.addEventListener(arg1,arg2,arg3);//arg1表示要监听的事件类型,arg2是一个function,arg3表示为是在冒泡阶段还是捕获触发事件,
    你的这句话window.addEventListener('load', a.fun, false); 表示页面加载完毕后load事件会调用a.fun函数,该事件是由window对象调用的,alert(this)就是打印出window对象,alert(e)就是event对象,
    但是window.addEventListener('load', a.fun(), false);这句话第二个参数传入的是a.fun()函数调用(这时已经调用了该函数,所以会打印语句)完毕后的返回值,由于在声明这个函数时没有返回值,所以第二个参数就是undenfined,这句话最后就相当于window.addEventListener('load',undenfined,false),页面加载完后根本不会调用任何函数,你把这句话直接写成a.fun();可以看到打印的结果是一样的,由于该函数不是通过事件触发的,所以e参数自然就为undenfiend,this对象就指向a对象了。
      

  2.   

    +1a.fun 表示函数地址
    a.fun() 表示函数调用完成后的返回值
      

  3.   

    上面已经说了就是这个意思,fun只是个Function的object而已