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

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

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

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

 Anubhav Ranjan29 окт. 2012 г., 09:06
@Sats: Есть ли у вас идеи, могу ли я иметь какой-либо альтернативный механизм для Object.freeze или я могу каким-то образом создать метод замораживания в прототипе объекта?
 Satish Bellapu29 окт. 2012 г., 09:00
kangax.github.com/es5-compat-table таблица совместимости
 kapa29 окт. 2012 г., 09:00
Как показано вэтот столэти браузеры просто слишком стары, чтобы поддерживать эту функцию EcmaScript 5.

Ответы на вопрос(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 );
};
 kapa29 окт. 2012 г., 09:11
Проблема в том, что методы, которые использует эта реализация, недоступны в IE8 (и, конечно, в IE7).
 Anubhav Ranjan29 окт. 2012 г., 09:13
@ColBeseder: пробовал, но бесполезно. Он создал метод-прототип, но теперь получил ошибку "Объект неподдерживать свойство или методgetOwnPropertyNames».
 oligofren19 февр. 2013 г., 15:05
Просто создайте фиктивную функцию () {}. Это устранит ошибку, и вы сможете продолжить свою жизнь, надеясь, что ваш javascript не зависит от того, что функция freeze фактически делает ...

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]-->

Ваш ответ на вопрос