Ответ довольно много там на самой странице MDN:
«Если вы решите использовать эту частичную реализацию, вы не должны полагаться на тех случаях, когда поведение отклоняется от ECMA-262, 5-е издание с некоторыми (и, возможно, с дополнительной модификацией для удовлетворения конкретных потребностей), эта частичная реализация может быть разумным мостом к моменту, когда bind() широко применяется в соответствии со спецификацией ».
Нет ничего плохого в прокладке MDN как таковой. Однако, если вы решите использовать их прокладку, убедитесь, что другие библиотеки не могут быть переопределены. Некоторое время назад у меня возникла проблема с тем, что Strophe делает это и заменяет одну прокладку другой.
Я обычно использую знак подчеркивания для покрытия таких вещей, но есть другие варианты, такие как es5shim. С подчеркиванием у вас есть метод, называемый (вы его догадались) '.bind' и работает немного по-другому с помощью прокладки MDN (использует «новый» вызов). Подчерк также имеет отличный метод под названием « .partial», который может быть полезен в сценариях, где вы не хотите изменять значение «this», но частично применяете аргументы.
То, что я делаю здесь, заключается в том, что вместо того, чтобы подгонять, возможно, посмотрите на что-то, что должным образом защищено/инкапсулировано в библиотеку. Скорее всего, вам понадобится больше одной прокладки в любом случае, если вы ориентируетесь на такие браузеры, как IE8.
Наконец, и не так важно проверить тесты производительности на: http://jsperf.com/browser-vs-es5-shim-vs-mdn-shim
пытались ли вы код совместимости они предоставляют на странице MDN? https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind – Sebas
Да, и это работает нормально. Но могу ли я быть уверенным, что это дело в любом случае? – BAK
Не ЛЮБЫЕ обстоятельства, но большинство. – backdesk