15

特定のタスクを達成する方法を探しています。つまり、

jQuery.when.apply( null, promiseArray ).done(...)

when( promiseArray ).done(...)

ご存知かもしれませんが、.bind()デフォルト引数のようなものを作成したり、かなり気の利いたことをしたりするのに慣れることができます。たとえば、常に呼び出す代わりに

var toStr = Object.prototype.toString;
// ...
toStr.call([]) // [object Array]

私たちはそれを次のように行うことができます

var toStr = Function.prototype.call.bind( Object.prototype.toString );
toStr([]) // [object Array]

これはかなりクールです (.bind()このような呼び出しでパフォーマンスが低下したとしても、私はそれを知っており、認識しています)、jQuerys.when呼び出しでは実際には達成できません。不明な量の promise オブジェクトを取得した場合、通常はそれらを配列にプッシュして、.when上記の最初のコード スニペットのようにそれらを渡すことができるようにします。

私はこれまでこれをやっています:

var when = Function.prototype.apply.bind( $.when );

今、私たちは次のように行くことができます

when( null, promiseArray ).done(...)

nullこれは機能しますが、毎回明示的に渡す必要もなくしたいと考えています。だから私は試しました

var when = Function.prototype.apply.bind( $.when.call.bind( null ) );

しかし、それは私に投げかけます:

"TypeError: Function.prototype.apply called on incompatible null"

私はこれにあまりにも長い間座っていて、もうまともに考えることができないと思います. 簡単な解決策があるように感じます。この問題を解決するために追加の関数を使用したくありません.bind()。.

ここで完全な例を参照してください: http://jsfiddle.net/pp26L/

4

2 に答える 2

10

これは機能するはずです:

when = Function.prototype.apply.bind( $.when, null);

の最初の引数をバインド(または必要に応じてカレー)して、.bindに修正しnullます。

フィドル

于 2012-04-20T14:10:56.357 に答える
7

bind可変数の引数を受け入れるため、メソッドを部分的に適用できます。したがって、代わりに:

var when = Function.prototype.apply.bind( $.when );

これを行う:

var when = Function.prototype.apply.bind( $.when , null );

そして更新されたjsfiddle:http: //jsfiddle.net/pp26L/2/

于 2012-04-20T14:11:15.100 に答える