在执行onload = fn时的第一个参数

时间:2012-04-19 16:11:56

标签: javascript

当我这样做时:

img.onload=fn;

函数fn得到argument[0] [object Event]

我该如何避免?

2 个答案:

答案 0 :(得分:3)

您不会避开事件对象。你拥抱他们。话虽这么说,如果你不想,你不必使用它。当浏览器在onload事件中触发时,它会将事件对象传递给处理程序,无论您是否请求它。正如您所指出的,即使您没有在处理程序参数中专门为它提供名称,它也存在于arguments数组中。

正如其他人在他们的回答和评论中指出的那样,你可以添加另一个匿名函数来进一步从被引发的事件中删除你的响应代码,但我个人认为这真的没必要。

正如@Yoshi在上面的评论中所指出的,以下内容可行:

img.onload = function() { 
  fn.call(this) 
};

这会调用您的fn方法传入当前的上下文this引用。同样,我个人会避免触及事件对象,因为这种类型的代码可能会在今天六周之后将其他人和您自己混淆。

答案 1 :(得分:0)

除了Jonathan Sampson的回答,一个简单的解决方法可以这样做

img.onload = function() {
   fn();
}

这样做,arguments为空 看小提琴(用javascript控制台):http://jsfiddle.net/ZxSEX/