2013-03-18 23 views
7

我開發了一個Javascript庫,它需要bind方法。 不幸的是,bind不被IE8支持。使用MDN綁定polyfill是否存在風險?

有一個polyfill on the MDN website它工作得很好。

我的問題是: 這個polyfill和其他Javascript庫之間是否存在問題或可能的不兼容?

在任何情況下安全使用?

+0

你嘗試他們的MDN頁面上提供的兼容代碼? https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind – Sebas 2013-03-18 14:15:27

+0

是的,它似乎工作正常。但是我可以確定在任何情況下都是這樣嗎? – BAK 2013-03-18 14:17:21

+0

並非任何情況,但大部分。 – backdesk 2013-12-18 13:07:10

回答

6

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

對我來說,與本地bind最明顯的區別是:

恕我直言,如果你只使用JavaScript的「優秀部分」,而不是開發一些框架的核心(對於IE8?),你不應該面對這個polyfill的任何問題。

2

答案是MDN頁面本身非常有:

「如果您選擇使用此部分實現,你必須不依賴於地方的行爲從ECMA-262,第5版偏離的情況下,對於一些但是(並且可能需要額外修改以適應特定需求),這種部分實現可能是當bind()根據規範得到廣泛實施時的合理橋樑。「

MDN墊片沒有問題。但是,如果您選擇使用墊片,請確保其不能被其他庫覆蓋。前一段時間我遇到了一個問題,Strophe就是這樣做的,並用另一個墊片代替墊片。

我傾向於使用下劃線來覆蓋像這樣的東西,但也有其他選項,如es5shim。用下劃線表示一個叫做(你猜對了)的方法'.bind',它的工作方式與MDN的墊片略有不同(使用'new'調用)。下劃線也有一個很好的方法,叫做' .partial',在你不想改變'this'的值但部分應用參數的場景中可以使用它。

我在這裏提出的一點是,不是勻場,而是看一些在圖書館中正確保護/封裝的東西。如果你的目標是IE8等瀏覽器,那麼你可能會需要不止一個墊片。

最後,並沒有那麼重要檢查出的性能測試在: http://jsperf.com/browser-vs-es5-shim-vs-mdn-shim

相關問題