ECMAScript第五版(于2009年12月发布)引入了一些新方法(详见此表)。然而,仍然有一些旧版本的浏览器无法实现这些新方法。
幸运的是,有一个方便的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方法的“最后堡垒”。)
当然,要使这个shim生效,它必须在所有其他脚本之前执行,这意味着我们希望在页面早期(在HEAD中,在所有其他SCRIPT元素之前)包含上述SCRIPT元素。
那么,这个第二个示例是否是向浏览器提供ECMAScript 5-shim的好方法?还有更好的方法吗?