7

我开发了一个需要该bind方法的 Javascript 库。不幸的是,bindIE8 不支持。

MDN 网站上有一个 polyfill ,效果很好。

我的问题是:这个 polyfill 和其他 Javascript 库之间是否存在问题或可能不兼容?

在任何情况下都可以安全使用吗?

4

2 回答 2

6

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Compatibility

对我来说,与本地人最明显的区别bind是:

恕我直言,如果你只使用 JavaScript 的“好的部分”,而不是开发某些框架的核心(对于 IE8?),你不应该面对这个 polyfill 的任何问题。

于 2013-12-18T12:19:14.497 回答
2

答案几乎就在 MDN 页面本身:

“如果你选择使用这个部分实现,你不能依赖那些行为偏离 ECMA-262 第 5 版的情况!但是,如果要小心(并且可能需要额外修改以适应特定需求),这个部分实现可能是根据规范广泛实施 bind() 时的合理桥梁。”

这样的 MDN 垫片没有任何问题。但是,如果您选择使用他们的 shim,请确保它不会被其他库覆盖。不久前我遇到了一个问题,Strophe 就是这样做并用另一个垫片替换一个垫片。

我倾向于使用下划线来覆盖此类内容,但还有其他选项,例如 es5shim。使用下划线,您有一个名为(您猜对了)“. bind”的方法,其工作方式与 MDN 的 shim 略有不同(使用“新”调用)。Underscore也有一个很棒的方法,叫做 ' .partial',它在你不想改变 'this' 的值但部分应用参数的情况下很有用。

我在这里要说明的一点是,与其进行匀场,不如查看在库中得到适当保护/封装的东西。如果您的目标是像 IE8 这样的浏览器,那么在任何情况下您都可能需要不止一个 shim。

最后,不是那么重要,请查看以下位置的性能测试:http: //jsperf.com/browser-vs-es5-shim-vs-mdn-shim

于 2013-12-18T13:14:23.603 回答