我很好奇:有人知道为什么 ECMAScript5 规范没有在严格模式下进一步收紧预定义对象原型(prototype)的属性吗?例如,似乎没有关于 hasOwnProperty 定义方式的信息。我已经尝试重新定义它(并测试了 FF4 beta 中的代码)并且我能够摆脱这个。如果我没有做错任何事,那么这意味着任何人都可以仍然重新定义 Object.prototype.hasOwnProperty 属性并真正搞砸所有依赖它的工作属性的代码...
对此有何看法?
编辑:在我深入研究规范时提供更多信息...
正如我在下面的评论中所说,由于应用于它的元数据(Writable、Enumerable 和 Configurable 都设置为 false)和 FF 4 beta,你无法在严格模式下真正更改 Object.prototype (我用它来运行我的测试)确实产生了异常。
谢谢。
最佳答案
然后呢?如果我愿意,我可以杀死 Object.prototype
上的所有内容,不要在您的项目/站点中包含此类代码,不要做更好的事情,找到那些正在做此类事情的白痴并确保踢球。
我的意思是,我什至可以通过执行 True = False
搞砸任何给定的 Python (2.x) 程序。
你永远无法防范白痴。绝不。尝试教育或避免他们。
编辑
为了澄清这是不可能的,如果你将你的脚本封装到一个匿名包装器中(如果你将它与其他代码一起使用,你应该这样做)“use strict”
将是你代码的本地.
这意味着,如果 evil idiot 代码本身不使用严格模式 - 他们不会......除非他们是彻头彻尾的白痴,我在这里不是在谈论 -它们在 ES3 中运行,而你美丽的严格性甚至不存在。
关于javascript - hasOwnProperty 和 ECMAScript 5 严格模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4647623/