问题标签 [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.
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 的好方法?有更好的方法吗?
javascript - es5-shim 和 underscore.js?
我的 JavaScript 项目中有es5-shim.js和underscore.js。
es5-shim.js 只是在 Internet Explorer 和一些旧浏览器的数组上添加了一些 JavaScript 原生函数,例如reduce
和。some
underscore.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 的功能?
javascript - 如何使用 Object.defineProperties 中的访问器值设置默认值?
我希望能够在实例化新对象时设置新名称。但不知何故,我发生了一个无限循环。我不知道如何解决它。
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__
我的感觉是没有,但我只是想检查一下是否有一些我没有遇到的信息。
javascript - Object.defineProperty 填充
我目前正在编写一个基于 ES5 新特性的 JavaScript API。它使用Object.defineProperty
相当广泛。我已经将它包装成两个新函数,称为Object.createGetSetProperty
和Object.createValueProperty
但是,我在旧浏览器中运行它时遇到了问题(例如可怕的 IE8)
考虑以下代码:
如您所见,在 Object.createValueProperty 下有一个优雅的回退,但我不知道如何使用 Object.createGetSetProperty 优雅地回退。
有谁知道任何解决方案,垫片,polyfills?
javascript - 没有 object.defineProperty 的 AngularJS 装饰器
如何在无法访问 object.defineProperty 的情况下使用装饰器?
我正在研究可用的垫片:
但如果那些没有通过测试,装饰器是否有另一种工作方式?
我正在为$onRootScope使用装饰器。
我正在使用角度 1.08。我需要兼容 IE7。
更新
我尝试了一些似乎有效的方法,但我不知道它们之间的区别:plunkr
谢谢你。
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。
es5-shim - 我什么时候需要 shim,什么时候需要 sham?
为什么EC5 Shim库有两个文件?我什么时候需要每一个?