我很好奇:有人知道为什么ECMAScript5规范没有在严格模式下加强预定义对象原型的属性吗?例如,似乎没有有关hasOwnProperty定义方式的信息.我尝试重新定义它(并在FF4 beta中测试了代码),因此我得以解决.如果我没有做错任何事情,那么这意味着任何人仍然可以重新定义Object.prototype.hasOwnProperty属性,并真正将依赖于该属性的所有代码用于工作属性…
对此有何想法?
编辑:我在浏览规范时的更多信息…
正如我在下面的评论中所述,由于应用于它的元数据(可写,可枚举和可配置都设置为false)和FF 4 beta(我将其设置为严格模式),因此您无法真正在严格模式下更改Object.prototype正在运行我的测试)会生成异常.
谢谢.
解决方法:
和?如果愿意,我可以杀死Object.prototype上的所有内容,不要在您的项目/站点中包含这样的代码,不要做得更好,找到那些正在做这些事情的白痴,并确保将他们踢进去.
我的意思是,我什至可以通过执行True = False来破坏任何给定的Python(2.x)程序.
您永远都无法防范白痴.决不.尝试教育或避免他们.
编辑
为了澄清这种情况的可能性,如果将脚本封装到匿名包装器中(如与其他代码一起使用,则应该这样做),“ use strict”将在您的代码中本地出现.
这意味着,如果邪恶的白痴代码没有单独使用严格模式-并且它们不会…除非它们是完全的白痴,而我在这里不是在谈论它们-它们在ES3中运行,并且您的美丽严格性不会.甚至不存在.