Почему объявление функции переопределяет недоступные для записи свойства глобального объекта?
-
13-12-2019 - |
Вопрос
Установка дескриптора свойства следующим образом:
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 это не работает.
Не связан с StackOverflow