设置这样的属性描述符:
Object.defineProperty(window,'someFunction',{ value: function() { alert('safe'); },writable: false,enumerable: false,configurable: false });
据我所知,应该使窗口的someFunction属性不可写.它适用于我期望的函数表达式,函数是否直接分配给对象属性… fiddle
window.someFunction = function() { alert('boom!'); } someFunction(); // safe
var someFunction = function() { alert('boom!'); } someFunction(); // safe
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中,它不起作用.