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