问题标签 [es5-shim]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
15313 浏览

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

ECMAScript 第五版(2009 年 12 月发布)引入了一系列新方法(详见此表)。但是,仍然有一些较旧的浏览器没有实现这些新方法。

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

但是,我不确定如何提供 ES5-shim ......我是否应该将其“提供”给所有浏览器,如下所示:

或者我应该包括一个检查,以便只“打扰”那些真正需要它的浏览器,就像这样:

(我Function.prototype.bind用来检查浏览器是否实现了所有新的 ECMAScript 5 方法。根据我上面链接的兼容性表,bind它是实现 ECMAScript 5 方法的“最后堡垒”。)

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

那么,第二个示例是否是向浏览器提供 ECMAScript 5-shim 的好方法?有更好的方法吗?

0 投票
2 回答
2810 浏览

javascript - es5-shim 和 underscore.js?

我的 JavaScript 项目中有es5-shim.jsunderscore.js

es5-shim.js 只是在 Internet Explorer 和一些旧浏览器的数组上添加了一些 JavaScript 原生函数,例如reduce和。someunderscore.js 添加了相同的东西(但语法不同)和更多的东西(对象和数组上的实用程序函数)。

但是,如果 es5-shim 添加的函数存在,underscore.js 会使用它们。

因此,在 Firefox 或 Chrome 等“最新”浏览器上,underscore.js 使用浏览器的本机功能。我认为它比纯 javascript 函数更好。但是在 Internet Explorer 上,underscore.js 使用 es5-shim 函数。如果我删除 es5-shim.js,underscore.js 会使用它自己的函数。

对此有何建议?我应该从我的项目中删除 es5-shim 并且只使用 underscore.js 吗?还是应该让 underscore.js 使用 es5-shim 的功能?

0 投票
3 回答
78247 浏览

javascript - Requirejs 为什么以及何时使用 shim 配置

我从这里API阅读了requirejs文档

但我没有得到垫片的一部分。为什么我应该使用 shim 以及我应该如何配置,我可以得到更多的澄清

请任何人举例说明为什么以及何时应该使用垫片。谢谢。

0 投票
1 回答
423 浏览

javascript - 如何使用 Object.defineProperties 中的访问器值设置默认值?

我希望能够在实例化新对象时设置新名称。但不知何故,我发生了一个无限循环。我不知道如何解决它。

0 投票
1 回答
405 浏览

javascript - Object.getPrototypeOf 失败到 __proto__ 失败到 object.constructor.prototype 垫片

我一直在浏览一些 shim/polyfill 库,发现其中一些有Object.getPrototypeOf. 在不存在时,它们会使用__proto__,如果不存在,则使用object.constructor.prototype.

我知道这__proto__是“非标准的”,虽然与Object.getPrototypeOf方法略有不同,但它们可以互换。

我也明白,原则上object.constructor.prototype,在其他两个都不存在的许多情况下,外部可访问就足够了(假设原型没有被重新分配)。

我遇到的问题是以下示例:

或者

有了上面这样的例子,我们可以说是“走链子”,如果垫片退回到object.constructor.prototype那么我们现在就会陷入无限循环的可怕情况。

我的问题:有什么方法可以在不存在且不存在Object.getPrototypeOf的环境中实现上述代码?__proto__

我的感觉是没有,但我只是想检查一下是否有一些我没有遇到的信息。

0 投票
1 回答
10621 浏览

javascript - Object.defineProperty 填充

我目前正在编写一个基于 ES5 新特性的 JavaScript API。它使用Object.defineProperty相当广泛。我已经将它包装成两个新函数,称为Object.createGetSetPropertyObject.createValueProperty

但是,我在旧浏览器中运行它时遇到了问题(例如可怕的 IE8)

考虑以下代码:

如您所见,在 Object.createValueProperty 下有一个优雅的回退,但我不知道如何使用 Object.createGetSetProperty 优雅地回退。

有谁知道任何解决方案,垫片,polyfills?

0 投票
1 回答
1202 浏览

javascript - 没有 object.defineProperty 的 AngularJS 装饰器

如何在无法访问 object.defineProperty 的情况下使用装饰器?

我正在研究可用的垫片:

但如果那些没有通过测试,装饰器是否有另一种工作方式?

我正在为$onRootScope使用装饰器。

我正在使用角度 1.08。我需要兼容 IE7。

更新

我尝试了一些似乎有效的方法,但我不知道它们之间的区别:plunkr

谢谢你。

0 投票
1 回答
211 浏览

javascript - Breeze - IE8 中的元数据助手

我在 IE8 中使用 Breeze.metadata-helper.js 时遇到问题。我已经包含了 es5-shim 和 sham 库。它在尝试执行时失败:makePropDescription(proto, property) 方法:Object.defineProperty(proto, propName, descr) 带有消息“getters & setters can not be defined on this javascript engine”。

它未能添加的属性是 DeclarationID 定义在:

我正在使用 Breeze v1.4.11 和 Metadata-Helper v1.0.5。

0 投票
0 回答
147 浏览

es5-shim - 我什么时候需要 shim,什么时候需要 sham?

为什么EC5 Shim库有两个文件?我什么时候需要每一个?

0 投票
0 回答
376 浏览

javascript - 我可以在 Android2.2+ WebView 上使用 ES5 Array 方法吗?

曾读过:

http://kangax.github.io/es5-compat-table/#Array.prototype.map

但找不到 webview 版本兼容性,例如http://caniuse.com上的那个