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

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

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

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

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

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

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

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

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

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


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

1 Ответ

6 голосов
/ 13 марта 2012

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

Проверка совместимости: Контрольный пример

  • В Firefox 4+ он работает нормально.
  • В Chrome 16 он работает нормально.
  • В Chrome 17 он не работает.
  • IE8 - не имеет Object.defineProperty, поэтому он не работает
  • В IE9 он не работает.
  • В Safari 5 он не работает.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...