我想知道为什么ECMA5的Object.freeze
和Object.seal
本身并未被冻结。
如果您可以在页面顶部运行它,它们是否无用:
Object.freeze = function() {};
Object.seal = function() {};
在我的测试中,这完全否定了它们的使用,因为你不能依赖它们的功能。
答案 0 :(得分:1)
freeze
和seal
是保护代码的一部分,当您控制运行时环境时,它们非常有用。在将对象交给不受信任的代码之前,您需要冻结或密封对象。
例如,如果您有一个用户可以提交代码来控制机器人的站点,您将冻结机器人对象,然后将其传递给用户上传的代码。如果用户试图覆盖freeze
或seal
,那么此时无关紧要。在设置环境并冻结对象之前,您不会让用户代码执行。
答案 1 :(得分:1)
它们对于保护代码本身非常有用,而不是保护代码免受恶意代码的侵害。
您可以使用它们来最大限度地减少您自己的代码中的错误可能造成的损害。在某些方面,这可以被视为更接近面向对象语言中可用的封装。
您不能使用这些方法来保护您的代码免受各种攻击。您可以使用它们来使操作代码变得更难,但是有很多方法可以提供一些可以称之为保护的东西。