我正在尝试在 Javascript 中创建一个枚举。使用的javascript代码是
var FeatureName = {
"FEATURE1": 1,
"FEATURE2": 2,
"FEATURE3": 3,
"FEATURE4": 4,
"FEATURE5": 5
}
Object.freeze(FeatureName);
当调用Object.freeze(FeatureName)方法时,它适用于除 IE7 和 IE8 之外的所有浏览器。有没有其他选择?
我正在尝试在 Javascript 中创建一个枚举。使用的javascript代码是
var FeatureName = {
"FEATURE1": 1,
"FEATURE2": 2,
"FEATURE3": 3,
"FEATURE4": 4,
"FEATURE5": 5
}
Object.freeze(FeatureName);
当调用Object.freeze(FeatureName)方法时,它适用于除 IE7 和 IE8 之外的所有浏览器。有没有其他选择?
您可以在您的页面上添加包含es5-sham “monkey-patch”(只需要包含es5-sham.min.js
),但重要的是要了解这只会防止错误出现。
不过,它不是真正的 polyfill;来自 Github 上项目的 README:
对象冻结
在所有旧引擎上静默失败。这应该没问题,除非您依赖此方法的安全和安保规定,而您不可能在旧引擎中获得这些规定。
如果你想使用 CDN,这个库也可以从cdnjs获得。
您可以将其包含在这样的代码中(注意将其限制为 IE 版本 8 和更早版本的标签):
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/es5-shim/4.0.5/es5-sham.min.js" type="text/javascript"></script>
<![endif]-->
John Resig 提供了另一种选择。我没有在你提到的浏览器中尝试过。试试看,让我们知道。
http://ejohn.org/blog/ecmascript-5-objects-and-properties/
Object.freeze = function( obj ) {
var props = Object.getOwnPropertyNames( obj );
for ( var i = 0; i < props.length; i++ ) {
var desc = Object.getOwnPropertyDescriptor( obj, props[i] );
if ( "value" in desc ) {
desc.writable = false;
}
desc.configurable = false;
Object.defineProperty( obj, props[i], desc );
}
return Object.preventExtensions( obj );
};