设置这样的属性描述符:
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来测试.严格模式似乎没有任何区别.
解决方法
这是一个bug
(see Bug #115452),我也在回答
this question时遇到了.
兼容性检查:Test case
>在Firefox 4中,它工作正常.>在Chrome 16中,它工作正常.>在Chrome 17中,它不起作用.> IE8-没有Object.defineProperty,所以它不工作>在IE9中,它不起作用.>在Safari 5中,它不起作用.