2013-03-18 4 views
7

私はbindメソッドを必要とするJavascriptライブラリを開発しました。 残念ながら、bindはIE8ではサポートされていません。MDNバインドポリフィルの使用に伴うリスクはありますか?

よく機能するポリフィルon the MDN websiteがあります。

私の質問は: このpolyfillと他のJavascriptライブラリとの間に問題や互換性がありませんか?

いずれにしても安全に使用できますか?ネイティブbindと私の最も明白な違いについては

+0

あなたは彼らがMDNページの提供、互換性のコードを試してみたのですか? https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind – Sebas

+0

はい、うまくいくようです。しかし、私はそれがどんな状況でも事実であることを確かめることができますか? – BAK

+0

ほとんどの状況ではなく、ほとんどです。 – backdesk

答えて

6

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

です:

  • arguments.callerは、バインドされた関数の呼び出し元を指していませんが、とにかくバウンドの
  • lengthをそれを使用するべきではありません関数が0に設定されている場合、これは関数アリティチェックに影響する可能性があります。https://github.com/fitzgen/wu.js/blob/master/lib/wu.js#L406

IMHO JavaScriptの「良い部分」のみを使用していて、フレームワーク(IE8の場合)のコアを開発していない場合は、このポリフィルに問題はないはずです。

2

答えはMDNページ自体にかなり多くあります:

「あなたは、この部分的な実装を使用することを選択した場合、あなたは行動がECMA-262第5版から外れたような場合に頼ってはならないいくつかと! (そしておそらく特定のニーズに合わせて追加の変更を加えて)、この部分的な実装は、bind()が仕様書に従って広く実装されているときの妥当な橋渡しとなるかもしれません。

MDNシムには何も問題はありません。ただし、シムを使用することを選択した場合は、他のライブラリによって上書きすることはできません。しばらく前に問題を抱えていたStropheはちょうどそれをやって、1つのシムを別のものに置き換えました。

私はこのようなものをカバーするためにアンダースコアを使用する傾向がありますが、es5shimのような他のオプションがあります。アンダースコアでは、(あなたが推測した)メソッド '.bind'があり、MDNのシム(「新しい」呼び出しを使用する)とは少し異なります。アンダースコアには ' .partial'という素晴らしいメソッドがあります。これは 'this'の値を変更せずに部分的に引数を適用するシナリオで役立ちます。

ここで私が作っているのは、シミングの代わりに、ライブラリ内で適切に保護され/カプセル化されているものを見ることです。 IE8などのブラウザをターゲットにしている場合は、いずれの場合でもシムが複数必要になる可能性があります。

最後に、そしてその重要なことでパフォーマンステストをチェックアウトしません: http://jsperf.com/browser-vs-es5-shim-vs-mdn-shim

関連する問題