我正在寻找一种方法来完成某项任务,即从
开始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 {{1}打电话。如果你有一个未知数量的promise对象,你通常将它们推入一个数组,然后就可以将它们传递到.when
,就像我上面的第一个代码片段一样。
到目前为止,我正在这样做:
.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"
解决方案。
请在此处查看完整示例:http://jsfiddle.net/pp26L/
答案 0 :(得分:10)
这应该有效:
when = Function.prototype.apply.bind( $.when, null);
您只需绑定(或咖喱,如果您愿意).bind
的第一个参数并将其修改为null
。
<强> Fiddle 强>
答案 1 :(得分:7)
bind
接受可变数量的参数,因此您可以部分应用方法。所以,而不是:
var when = Function.prototype.apply.bind( $.when );
这样做:
var when = Function.prototype.apply.bind( $.when , null );
更新了jsfiddle:http://jsfiddle.net/pp26L/2/