addEventListener的疑问

zhaoxiao90 2011-10-01 12:10:35
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]

是不是第一种属于函数调用模式,第二种属于方法调用模式
为什么会有这种差别呢?
...全文
103 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BLUE_LG 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 s11ss 的回复:]
引用 1 楼 rather_lonely 的回复:
window.addEventListener(arg1,arg2,arg3);//arg1表示要监听的事件类型,arg2是一个function,arg3表示为是在冒泡阶段还是捕获触发事件,
你的这句话window.addEventListener('load', a.fun, false); 表示页面加载完毕后load事件会调用a.fun函……
[/Quote]
上面已经说了。。。就是这个意思,fun只是个Function的object而已。。。
s11ss 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rather_lonely 的回复:]
window.addEventListener(arg1,arg2,arg3);//arg1表示要监听的事件类型,arg2是一个function,arg3表示为是在冒泡阶段还是捕获触发事件,
你的这句话window.addEventListener('load', a.fun, false); 表示页面加载完毕后load事件会调用a.fun函数,该事件是由window对象调用的,alert(th……
[/Quote]
+1

a.fun 表示函数地址
a.fun() 表示函数调用完成后的返回值
Rather_lonely 2011-10-01
  • 打赏
  • 举报
回复
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对象了。

87,989

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧