我很好奇:有没有人知道为什么 ECMAScript5 规范在严格模式下为预定义对象原型的属性设置得更严格一些呢?例如,似乎没有关于 hasOwnProperty 如何定义的信息。我尝试重新定义它(并在 FF4 beta 中测试了代码),结果居然能够成功。如果我没做错什么,这意味着任何人都可以仍然重定义 Object.prototype.hasOwnProperty 属性,并真正捣乱依赖它工作的所有代码... 您对此有何想法?
编辑:当我查看规范时,增加了一些更多的信息...
正如我在下面的评论中所说,在严格模式下您无法真正更改 Object.prototype,因为已经应用了元数据(Writable、Enumerable 和 Configurable 都被设置为 false),并且我正在使用的 FF 4 beta(用于运行我的测试)确实会生成异常。
谢谢。
编辑:当我查看规范时,增加了一些更多的信息...
正如我在下面的评论中所说,在严格模式下您无法真正更改 Object.prototype,因为已经应用了元数据(Writable、Enumerable 和 Configurable 都被设置为 false),并且我正在使用的 FF 4 beta(用于运行我的测试)确实会生成异常。
谢谢。
true
,因此您可以轻松地向它们添加属性(请参见第15节)。据我所知,目标是保持ES对象模型的灵活性,仅锁定绝对关键的部分(例如使全局的undefined
、NaN
和Infinity
属性不可写和不可配置:)) - kangax