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 生效,它必须在所有其他脚本之前执行,这意味着我们希望在页面的早期包含上述 SCRIPT 元素(在 HEAD 中,在所有其他 SCRIPT 元素之前)。
那么,第二个示例是否是向浏览器提供 ECMAScript 5-shim 的好方法?有更好的方法吗?