Установка дескриптора свойства следующим образом:
Object.defineProperty(window, 'someFunction', {
value: function() { alert('safe'); },
writable: false,
enumerable: false,
configurable: false
});
... должен, насколько мне известно, сделать свойство someFunction
window
недоступным для записи. Он работает для выражений функций, как я ожидаю, независимо от того, назначена ли функция непосредственно свойству объекта... fiddle
window.someFunction = function() { alert('boom!'); }
someFunction(); // safe
... или присваивается глобальной переменной: fiddle
var someFunction = function() { alert('boom!'); }
someFunction(); // safe
Однако он не работает с объявлениями функций: fiddle
function someFunction() { alert('boom!'); }
someFunction(); // boom!
Является ли это поведение преднамеренным? Каковы причины этого? Является ли это документированным где угодно? Или я просто делаю какую-то глупую ошибку?
Кстати, я использую Chromium 17 для проверки этого. Строгий режим, похоже, не имеет никакого значения.