6

Javascriptで列挙を作成しようとしています。使用されるJavaScriptコードは

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

メソッドObject.freeze(FeatureName)が呼び出されると、IE7 と IE8 を除くすべてのブラウザで正常に動作します。これに代わるものはありますか?

4

2 に答える 2

5

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 );
};
于 2012-10-29T08:07:26.857 に答える
5

ページにes5-sham "monkey-patch"を追加できます(必要なのは のみですes5-sham.min.js)。

ただし、これは真のポリフィルではありません。Github のプロジェクトの README から:

Object.freeze

すべてのレガシー エンジンでサイレントに失敗します。このメソッドの安全性とセキュリティの規定に依存していない限り、これは問題ありません。これは、レガシー エンジンでは取得できない可能性があります。

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]-->
于 2014-12-05T22:50:26.030 に答える