2011-12-20 12 views
1

これはとても奇妙なようです。遅延配列 - 配列結果アクセスの問題

私は、次の

$.when.apply(null, arrayOfDeferredObjects).then(function(result)) { 
    if (1 == arrayOfDeferredObjects.length){ 
     //stuff done here 
    } 
    else{ 
     for (var index = 0; index < contentUnits.length; index++) { 
      if(arguments && arguments[index][0] && arguments[index][0].response) { 
       //stuff done here 
      } 
     }; 
    } 

私の期待が、引数が1つのDeferredの配列の呼び出し及び繰延配列のXコールのXオブジェクトの配列のための1つのオブジェクトの配列になることである持っています。

私はこれがなぜ起こっているのか知っていますが、配列の長さをチェックするのはうんざりです。 1つのオブジェクトしかなく、1より大きい場合は、引数は配列ではありません。それは明らかです。最初の呼び出しを表すだけでなく、パラメータを返すために何かできることはありますか?

答えて

1

引数は、このように常に直接関数のコンテキストを反映し、コンテキスト外を参照することはありません。また、元の配列への参照を使用しましたが、これはこのコードに基づいて変更されません。

元の配列とArgumentsオブジェクトは同じではなく、メンバと同じオブジェクト参照を持つだけです。引数は決して配列ではなく、常に長さプロパティを持っています(あなたのステートメントに基づいて、私はあなたが引数についていくつかの誤った仮定をしていると思います)。

then関数のパラメータの引数は、when呼び出しの遅延の種類と数によって異なります。仕様を参照してください。

最後に、反復されたContentUnits変数が表示されないため、実際に作業コードを投稿することはできません。

あなたがやろうとしていることをするためのより良い方法があると思いますが、実際にあなたがしようとしていることは実際には言いませんでした。 ありがとうございます。