所以说我有一个$ .post函数数组
var pa = [$.post(url0), $.post(url1),......];
$.when(pa[0],pa[1],...]) // works as expected
但
$.when.apply(pa) // does not work
答案 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( /* ... */ ) { }