0

私がする時 :

img.onload=fn;

関数 fn は を取得しargument[0] [object Event]ます。

どうすればそれを回避できますか?

4

2 に答える 2

3

イベントオブジェクトを避けません。あなたはそれらを受け入れます。そうは言っても、使いたくない場合は使用する必要はありません。ブラウザーがonloadイベントで起動すると、リクエストの有無にかかわらず、イベント オブジェクトがハンドラーに渡されます。ご指摘のとおり、これはarguments、ハンドラー パラメーターで特に名前を指定しなくても、配列に存在します。

ここにいる他の人が回答とコメントで指摘しているように、別の匿名関数を追加して、発生したイベントから応答コードをさらに削除できますが、個人的にはこれは本当に不要だと思います.

上記のコメントで @Yoshi が指摘したように、次のように動作します。

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

これにより、現在のコンテキスト参照fnを渡してメソッドが呼び出されます。this繰り返しますが、このタイプのコードは、今日から 6 週間後、他の人や自分自身を混乱させる可能性があるため、個人的にはイベント オブジェクトに触れないようにします。

于 2012-04-19T16:15:54.427 に答える
0

ジョナサン・サンプソンの回答に加えて、簡単な回避策を次のように行うことができます

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

そうすることargumentsは、空の
フィドルを参照してください(javascriptコンソールを使用):http://jsfiddle.net/ZxSEX/

于 2012-04-19T16:24:21.007 に答える