javascript – 如何提供ECMAScript 5(ES 5) – shim?

ECMAScript第五版(2009年12月发布)介绍了一系列新方法(详见this table)。然而,仍然有旧的浏览器,没有实现这些新的方法。

幸运的是,存在一个方便的脚本(用JavaScript编写) – ES5-shim – 它们在不存在的环境中手动实现这些方法。

但是,我不知道如何提供ES5垫片…我应该把它“给”它所有的浏览器,像这样:

<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方法的“最后一个堡垒”)。

当然,为了使这个垫片有效,它必须在所有其他脚本之前执行,这意味着我们希望在页面的早期(在HEAD中,在所有其他SCRIPT元素之前)包括上述SCRIPT元素。

那么,这第二个例子是一个很好的方式来提供ECMAScript 5-shim到浏览器?有更好的方法吗?

ES5-Shim只会填补浏览器不实现的部分,所以只是给所有的浏览器。它将处理什么需要shimmed的检测,什么不处理。

但要注意在某些情况下什么垫片不能正常工作列出的警告。我有过去的问题,它导致一吨痛苦,直到你意识到答案是超级简单…

http://stackoverflow.com/questions/8732846/how-to-provide-ecmascript-5-es-5-shim

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – 如何提供ECMAScript 5(ES 5) – shim?