避免.CALL()和。适用()使用.bind()(Avoiding .call() and .app

2019-07-29 01:52发布

我正在寻找一种方式来完成特定任务,即从去

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通话。 如果你有承诺对象的未知量,通常那些推到一个数组,然后要能够通过这些进入.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"

我想我坐在在这个时间太长现在想不清楚了。 感觉就像有一个简单的解决方案。 我不希望使用任何附加功能来解决这个问题,我会用绝对prefere解决.bind()

在这里看到一个完整的例子: http://jsfiddle.net/pp26L/

Answer 1:

这应该工作:

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

你只要绑定(或咖喱,如果你喜欢)的第一个参数.bind并解决它null

小提琴



Answer 2:

bind接受可变数量的参数,所以可以部分地应用的方法。 所以,相反的:

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

做这个:

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

而更新的jsfiddle: http://jsfiddle.net/pp26L/2/



文章来源: Avoiding .call() and .apply() using .bind()