2012-04-19 60 views
0

当我这样做:第一个参数做的onload =时FN

img.onload=fn;

功能FN得到argument[0] [object Event]

我怎样才能避免这种情况?

+0

不太清楚我...在哪里以及如何定义'fn'? – fcalderan 2012-04-19 16:14:17

+3

'img.onload =函数(){fn.call(本)};' – Yoshi 2012-04-19 16:16:03

+0

为什么不能简单地忽略这样的说法?你没有明确地通过一个论点,所以大概你不希望使用一个论点。该函数传递触发它的事件,这在某些情况下可能很有用。如果你不需要它,不要使用它。 – 2012-04-19 16:16:14

回答

3

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

正如其他人在这里他们的答案和评论所指出的那样,你可以添加另一个匿名函数被引发该事件进一步去除你的响应代码,但我个人觉得这很不必要的。

由于@Yoshi在上面的评论中指出的,下面将工作:

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

这将调用您的fn方法传入当前的上下文this参考。再一次,我个人会避免触摸事件对象,因为这种类型的代码可能会在离现在六周的时候让别人和你自己感到困惑。

0

除了乔纳森·桑普森的答案,一个简单的解决方法可以像这样

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

这样做,arguments是空
看到小提琴(使用JavaScript控制台):http://jsfiddle.net/ZxSEX/

+0

Yoshi的实施是一个好一点,因为它不会失去这个* *的情况下(这可能是也可能不是很重要).. – 2012-04-19 16:26:52

+0

我没有注意到他的评论 - @Yoshi你应该写,作为一个答案(或者你可以随意更新我的,因为你喜欢) – fcalderan 2012-04-19 16:28:12

+0

其实我与乔纳森在这个。所以我不想太鼓励这个。 – Yoshi 2012-04-19 17:01:06

相关问题