像这样设置属性描述符:
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
但是,它似乎不适用于函数声明:fiddle
function someFunction() { alert('boom!'); }
someFunction(); // boom!
这种行为是故意的吗?其背后的原因是什么?这在任何地方都有记录吗?还是我只是犯了某种愚蠢的错误?
顺便说一句,我正在使用 Chromium 17 进行测试。严格模式似乎没有任何区别。