我正在寻找一种方法来完成特定任务,即从
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()
会有一定的性能损失,我知道它,也意识到了它),但我无法真正实现它来处理jQuery的.when
方法调用。如果你有未知数量的promise对象,通常会将它们推入一个数组中,然后像我上面的第一个代码片段那样传递给.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"
我想我已经坐在这个问题上太久了,现在无法清晰地思考。感觉有一个简单的解决方案。我不想使用任何其他的函数来解决这个问题,我希望使用.bind()
来实现。
在这里可以看到完整的示例:http://jsfiddle.net/pp26L/