1

所以说我有一组 $.post 函数

var pa = [$.post(url0), $.post(url1),......];

$.when(pa[0],pa[1],...]) // works as expected

$.when.apply(pa) // does not work
4

3 回答 3

1

你应该使用:

$.when.apply($, pa);

的第一个参数apply是函数应该被调用的上下文(即this在函数的上下文中意味着什么)。第二个参数是一个包含函数参数的数组。

于 2013-01-22T08:53:04.883 回答
1

您忘记了 的第一个参数.apply(),它是函数的 thisArg。由于$.when不关心它的值this,你可以传递任何东西:

$.when.apply(null, pa);
$.when.apply($, pa);
于 2013-01-22T08:53:49.593 回答
1

Function.prototype.apply需要上下文作为第一个参数(在被调用函数中用作 的引用的对象this

所以你可以这样称呼它

$.when.apply( null, pa );

我喜欢每次都使用一点“诡计”来避免这种情况。我们可以Function.prototype.bind像这样调用

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

现在,我们确实可以调用

when( pa ).done( /* ... */ ) { }
于 2013-01-22T08:54:05.207 回答