Javascript: объект не поддерживает метод "заморозить"

Я пытаюсь создать перечисление в Javascript. Используемый код JavaScript

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

Когда вызывается метод Object.freeze (FeatureName), он отлично работает для всех браузеров, кроме IE7 и IE8. Есть ли альтернатива этому?

2 ответа

Джон Резиг предоставляет альтернативу. Я не пробовал это в упомянутых вами браузерах. Попробуйте и дайте нам знать.

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

Вы можете добавить включить es5-шам "обезьяна-патч" (нужно только включить es5-sham.min.js) на вашей странице, но важно понимать, что это просто предотвратит появление ошибки.

Это не настоящий polyfill, хотя; из README проекта на 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]-->
Другие вопросы по тегам