我已经开发了一个需要bind方法的Javascript库。不幸的是,IE8不支持bind。
有一个polyfill on the MDN website可以很好地工作。
我的问题是:这个polyfill和其他Javascript库之间是否存在问题或可能不兼容?
在任何情况下使用它都是安全的?
发布于 2013-12-18 20:19:14
对我来说,与原生bind最明显的区别是:
arguments.caller不指向绑定函数的调用方,但您不应该使用它。绑定函数的anywaylength设置为0,这可能会影响像https://github.com/fitzgen/wu.js/blob/master/lib/wu.js#L406这样的函数一致性检查
如果你只使用JavaScript的“好的部分”,而不是开发一些框架的核心(对于IE8?),你不应该面对这个polyfill的任何问题。
发布于 2013-12-18 21:14:24
答案就在MDN页面上:
“如果您选择使用此部分实现,则不能依赖于那些行为偏离ECMA-262,第5版的情况!但是,请谨慎操作(并可能进行额外修改以满足特定需求),此部分实现可能是根据规范广泛实现bind()时的一个合理桥梁。”
MDN填充程序本身并没有什么问题。但是,如果您选择使用他们的填充程序,请确保它不能被其他库覆盖。不久前,我遇到了一个问题,Strophe就是这么做的,并用另一个填充程序替换了一个填充程序。
我倾向于使用下划线来覆盖这类内容,但也有其他选项,如es5shim。使用下划线,您有一个名为'.bind‘的方法(您已经猜到了),它的工作方式与MDN的填充程序略有不同(使用'new’调用)。下划线还有一个很棒的方法,叫做'.partial‘,在你不想改变'this’的值而只是部分应用参数的情况下,这个方法很有用。
我在这里要说的是,也许可以看看库中受到适当保护/封装的东西,而不是垫片。如果您的目标是像IE8这样的浏览器,那么在任何情况下,您都有可能需要多个填充程序。
最后,也是不太重要的,请查看以下网站的性能测试:http://jsperf.com/browser-vs-es5-shim-vs-mdn-shim
https://stackoverflow.com/questions/15478539
复制相似问题