10

像这样设置属性描述符:

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 进行测试。严格模式似乎没有任何区别。

4

1 回答 1

6

这是一个错误(参见错误 #115452),我在回答这个问题时也遇到了这个错误。

兼容性检查:测试用例

  • 在 Firefox 4+ 中,它运行良好。
  • 在 Chrome 16 中,它运行良好。
  • 在 Chrome 17 中,它不起作用。
  • IE8-没有Object.defineProperty,所以没用
  • 在 IE9 中,它不起作用。
  • 在 Safari 5 中,它不起作用。
于 2012-03-13T14:30:21.643 回答