Setting a property descriptor like this:
Object.defineProperty(window, 'someFunction', {
value: function() { alert('safe'); },
writable: false,
enumerable: false,
configurable: false
});
...should, as far as I know, make the someFunction
property of window
non-writable. It works for function expressions as I expect, whether the function is directly assigned to the object property... fiddle
window.someFunction = function() { alert('boom!'); }
someFunction(); // safe
...or assigned to a global variable: fiddle
var someFunction = function() { alert('boom!'); }
someFunction(); // safe
However, it doesn't seem to work with function declarations: fiddle
function someFunction() { alert('boom!'); }
someFunction(); // boom!
Is this behavior intentional? What is the reasoning behind it? Is this documented anywhere? Or am I just making some kind of silly mistake?
By the way, I'm using Chromium 17 to test this. Strict mode doesn't seem to make any difference.
This is a bug (see Bug #115452), which I also encountered when answering this question.
Object.defineProperty
, so it doesn't workIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With