ECMAScript Fifth Edition (выпущен в декабре 2009 г.) представляет собой набор новых методов (подробнее см. эту таблицу). Тем не менее, по-прежнему существуют старые браузеры, которые не реализуют эти новые методы.
К счастью, существует удобный script (написанный на JavaScript) - ES5-shim - который реализует эти методы вручную в средах, где они не существует.
Однако, я не уверен, как обеспечить ES5-shim... Должен ли я просто "дать" его всем браузерам, например:
<script src="es5-shim.js"></scipt>
Или я должен включить проверку, чтобы только "беспокоить" те браузеры, которые действительно нуждаются в ней, например:
<script>
if ( !Function.prototype.hasOwnProperty( 'bind' ) ) {
(function () {
var shim = document.createElement( 'script' );
shim.src = 'es5-shim.js';
var script = document.getElementsByTagName( 'script' )[0];
script.parentNode.insertBefore( shim, script );
}());
}
</script>
(Я использую Function.prototype.bind
, чтобы проверить, реализует ли браузер все новые методы ECMAScript 5. В соответствии с таблицей совместимости, которую я связывал выше, bind
является "последним бастионом", когда дело доходит до внедрения методов ECMAScript 5.)
Конечно, для того, чтобы эта регулировка была эффективной, ее нужно выполнить перед всеми другими сценариями, что означает, что мы хотим включить вышеупомянутые элементы script на ранней странице (в HEAD, прежде чем все остальные script).
Итак, будет ли этот второй пример хорошим способом предоставить ECMAScript 5-shim для браузеров? Есть ли лучший способ сделать это?