下划线绑定在IE8中无法工作

6

我正在使用underscore.js中的_.bind方法,但是在IE8/9中它无法正常工作。

我知道MDN有一个解决方法(MDN Polyfill),但不确定是否可以应用于underscore库,或者是否在underscore本身中有修复此问题的方法。

我想要实现的一个例子是:

window.onload = _.bind(function() { 

     this.product.quantityListing();
}, this);

编辑:我在其他地方使用了_.bind实例,它在IE8中能够正常工作——然而,在我想要检查窗口是否已经加载完成时,它就无法工作了。


你为什么在这里使用 new _.bind(fn)?这里的 new 似乎是无用的。 - Ja͢ck
Underscore基本上是一组polyfills的集合。 - Prinzhorn
是的,那就是我选择的路线,但我只是想避免这样做并利用_.bind - 然而需要继续前进,所以只能将就一下。 - Ashley Banks
2个回答

3

_.bind 和 MDN 的 Function#bind shim 基本上是相同的。如果你使用 MDN 方法,就不需要使用 Underscore.js 方法。

你可以像这样使用 MDN 方法:

window.onload = (function() {
    this.product.quantityListing();
}).bind(this);

另一方面,如果您在页面中包含Underscore之前使用MDN shim,则Underscore将在必要时使用shimmed版本。
因此,如果在Underscore之前包含shim,则可以使用任何一个。个人建议使用Function#bind,因为在本地支持它的浏览器中性能(略微)更好。

1
值得注意的是,如果存在Function.bind,underscore将使用Function.bind。因此,如果在underscore之前加载了MDN shim,则underscore将使用该shim,因为它会创建Function.bind。如果代码库已经在使用它并且不能进行重构,则这非常有用。 - GillesC

0
整个 Underscore 的前提就是它可以在 IE8 以及其他浏览器中运行,但如果你使用的方式高度不寻常甚至是错误的。你应该这样使用它:
window.onload = _.bind(function() {
    this.product.quantityListing();
}, this);

即不使用new关键字。

_.bind()的结果是一个闭包,其中this被绑定;一旦文档加载完成,它将使用预期的上下文调用该函数。


那是我的错,新的不应该在那里 - 然而它仍然不起作用。 - Ashley Banks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接