Почему объявление функции переопределяет недоступные для записи свойства глобального объекта?

StackOverflow https://stackoverflow.com//questions/9686014

Вопрос

Установка дескриптора свойства следующим образом:

Object.defineProperty(window, 'someFunction', {
    value: function() { alert('safe'); },
    writable: false,
    enumerable: false,
    configurable: false
});

...насколько мне известно, следует сделать someFunction свойство window не записываемый.Это работает для функциональные выражения как я ожидаю, назначена ли функция непосредственно свойству объекта... скрипка

window.someFunction = function() { alert('boom!'); }
someFunction(); // safe

...или присвоено глобальной переменной: скрипка

var someFunction = function() { alert('boom!'); }
someFunction(); // safe

Однако, похоже, это не работает с объявления функций: скрипка

function someFunction() { alert('boom!'); }
someFunction(); // boom!

Является ли такое поведение намеренным?Какова причина этого?Это где-нибудь задокументировано?Или я просто делаю какую-то глупую ошибку?


Кстати, для проверки я использую Chromium 17.Строгий режим, похоже, не имеет никакого значения.

Это было полезно?

Решение

Это ошибка (см. ошибку № 115452), с чем я тоже столкнулся при ответе этот вопрос.

Проверка совместимости: Прецедент

  • В Firefox 4+ всё работает нормально.
  • В Chrome 16 все работает нормально.
  • В Chrome 17 это не работает.
  • IE8 - нет Object.defineProperty, так это не работает
  • В IE9 это не работает.
  • В Safari 5 это не работает.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top