2013-03-18 1 views
7

Я разработал библиотеку Javascript, которая требует метода bind. К сожалению, bind не поддерживается IE8.Есть ли риск, связанный с использованием полина заполнителя MDN?

Есть полипол on the MDN website, которые хорошо работают.

Мой вопрос: Есть ли проблемы или возможная несовместимость между этим полиполком и другими библиотеками Javascript?

Безопасно использовать в любом случае?

+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

Для меня наиболее очевидных различий с родной bind являются:

  • arguments.caller не указывает на вызывающей связанной функции, но вы не должны использовать его в любом случае
  • length сшиваемых функция установлена ​​в 0, это может повлиять на проверки функции, такие как https://github.com/fitzgen/wu.js/blob/master/lib/wu.js#L406

ИМХО, если вы используете только «хорошие детали» JavaScript и не разрабатываете ядро ​​какой-либо структуры (для IE8?), Вы не должны сталкиваться с какими-либо проблемами с этим полиполком.

2

Ответ довольно много там на самой странице MDN:

«Если вы решите использовать эту частичную реализацию, вы не должны полагаться на тех случаях, когда поведение отклоняется от ECMA-262, 5-е издание с некоторыми (и, возможно, с дополнительной модификацией для удовлетворения конкретных потребностей), эта частичная реализация может быть разумным мостом к моменту, когда bind() широко применяется в соответствии со спецификацией ».

Нет ничего плохого в прокладке MDN как таковой. Однако, если вы решите использовать их прокладку, убедитесь, что другие библиотеки не могут быть переопределены. Некоторое время назад у меня возникла проблема с тем, что Strophe делает это и заменяет одну прокладку другой.

Я обычно использую знак подчеркивания для покрытия таких вещей, но есть другие варианты, такие как es5shim. С подчеркиванием у вас есть метод, называемый (вы его догадались) '.bind' и работает немного по-другому с помощью прокладки MDN (использует «новый» вызов). Подчерк также имеет отличный метод под названием « .partial», который может быть полезен в сценариях, где вы не хотите изменять значение «this», но частично применяете аргументы.

То, что я делаю здесь, заключается в том, что вместо того, чтобы подгонять, возможно, посмотрите на что-то, что должным образом защищено/инкапсулировано в библиотеку. Скорее всего, вам понадобится больше одной прокладки в любом случае, если вы ориентируетесь на такие браузеры, как IE8.

Наконец, и не так важно проверить тесты производительности на: http://jsperf.com/browser-vs-es5-shim-vs-mdn-shim

 Смежные вопросы

  • Нет связанных вопросов^_^