Установка дескриптора свойства, подобного этому:
Object.defineProperty(window, 'someFunction', {
value: function() { alert('safe'); },
writable: false,
enumerable: false,
configurable: false
});
...должна, насколько я знаю, сделать свойство someFunction
окна недоступным для записи. Он работает для функциональных выражений, как я и ожидал, независимо от того, назначена ли функция непосредственно свойству объекта...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. Строгий режим, кажется, не имеет никакого значения.