像这样设置属性描述符:
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来测试它。严格模式似乎没有任何区别。
答案 0 :(得分:6)
这是一个错误(see Bug #115452),我在回答this question时也遇到了这个错误。
Object.defineProperty
,因此无效