我开发了一个需要bind
方法的Javascript库。
不幸的是,IE8不支持bind
。
有一个填充on the MDN website,效果很好。
我的问题是: 此polyfill与其他Javascript库之间是否存在问题或可能存在不兼容性?
在任何情况下都可以安全使用?
答案 0 :(得分:6)
对我而言,与本地bind
最明显的区别是:
arguments.caller
没有指向绑定函数的调用者,但是你不应该使用它length
设置为0,这可能会影响https://github.com/fitzgen/wu.js/blob/master/lib/wu.js#L406 恕我直言,如果你只使用JavaScript的“好部分”,而不是开发某些框架的核心(对于IE8?),你不应该面对这个polyfill的任何问题。
答案 1 :(得分:2)
答案几乎就在MDN页面上:
“如果你选择使用这个部分实现,你不能依赖那些行为偏离ECMA-262,第5版的情况!不过要小心(并且可能需要额外修改以满足特定需求),实现可能是根据规范广泛实现bind()的时间的合理桥梁。“
MDN垫片没有任何问题。但是,如果您选择使用他们的垫片,请确保它不能被其他库覆盖。我刚才有一个问题,Strophe正在做这件事并用另一个替换一个垫片。
我倾向于使用下划线来覆盖这样的东西,但还有其他选项,如es5shim。使用下划线,您有一个名为(您猜对了)的方法' .bind',并且与MDN的垫片(使用'new'调用)略有不同。 Underscore还有一个很好的方法叫做“ .partial”,在你不想改变'this'的值但部分应用参数的情况下这个方法非常有用。
我在这里提出的观点是,不是填充,而是查看在库中正确保护/封装的内容。如果您的目标是IE8等浏览器,那么您在任何情况下都需要不止一个垫片。
最后,并不是那么重要的检查性能测试: http://jsperf.com/browser-vs-es5-shim-vs-mdn-shim