为什么$ .when.apply不按预期工作

时间:2013-01-22 08:51:59

标签: javascript jquery

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

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

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

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

3 个答案:

答案 0 :(得分:1)

您应该使用:

$.when.apply($, pa);

apply的第一个参数是应该调用函数的上下文(即this在函数的上下文中的含义)。第二个参数是一个带有函数参数的数组。

答案 1 :(得分:1)

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

$.when.apply(null, pa);
$.when.apply($, pa);

答案 2 :(得分:1)

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

所以你可以称之为

$.when.apply( null, pa );

我喜欢用一点“诡计”来避免每一次。我们可以调用Function.prototype.bind之类的

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

现在,我们确实可以致电

when( pa ).done( /* ... */ ) { }