2012-04-19 64 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

相關問題