使用Javascript:对象不支持方法“冻结”([removed] Object doesn

2019-07-03 10:56发布

我想在JavaScript中创建enummeration。 所使用的JavaScript代码是

var FeatureName = {
"FEATURE1": 1,
"FEATURE2": 2,
"FEATURE3": 3,
"FEATURE4": 4,
"FEATURE5": 5
}
Object.freeze(FeatureName);

当方法Object.freeze(FeatureName),被称为它工作得很好,除了IE7和IE8所有的浏览器。 是否有任何替代品吗?

Answer 1:

约翰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 );
};


Answer 2:

您可以添加包括ES5-假 “猴子补丁”(仅需要包括es5-sham.min.js )您的网页上,但要明白,这只会防止错误出现是非常重要的。

这不是一个真正的填充工具,虽然; 从项目的Github上自述:

Object.freeze

默默的失败对所有传统的发动机。 除非你是根据这种方法的安全性和安全性的规定,你不能在传统的发动机可能无法获得这应该是罚款。

该库也可以从cdnjs如果要使用CDN。

你可以用代码包括像这样(注意标签将其限制在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]-->


文章来源: Javascript: Object doesn't support method 'freeze'