下記のソースは、ブレイクスルーjavascript100頁に記述されている、サーバー上の画像の読み込み完了を待ってから処理を行うものです。
javascript
1var deferreds = $("img").map(function(i,el) { 2 var deferred = new $.Deferred() 3 , img = new Image();//オリジナルの画像取得 4 img.onload = function() { 5 return deferred.resolve(); 6 }; 7 8 img.onerror = function() { 9 return deferred.resolve(); 10 }; 11 12 img.src = el.src; 13 return deferred.promise(); 14}); 15 16$.when.apply($,deferreds).then(function() { 17 console.log("done!"); 18});
上記のソースに対していくつか疑問があります。
①mapのコールバック関数内のreturn deferred.promise();
は、すべての画像をmap()
で加工し終えたあとに実行される処理なのでしょうか。
②なぜapplyの第一引数に$、つまりjqueeyオブジェクトを設定しているのでしょうか。thisの参照先を弄る必要性?を感じる処理ではないように見えますが、何故でしょうか。
とりあえず、何か設定しないといけないので、採用理由は、不明ですが、jqueryオブジェクトを設定したということですか。
③apllyの第二引数に指定したもの(deferreds)は、レシーバオブジェクト(when)に渡す引数ですが、これは、whenに渡された後どうなるのでしょうか。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。