如何恢复被重写的函数';Javascript中的原始状态

如何恢复被重写的函数';Javascript中的原始状态,javascript,Javascript,假设您有一个脚本需要在覆盖javascript的JSON的页面上运行。stringify,您如何确保您的代码使用原始的stringify而不是重写的stringify?如果您正在创建库,则要求JSON.stringify应符合标准行为 对代码提出严格要求并没有错,事实上这是一个好主意。您只需要确定要记录需求 显然,如果原始文件被永久覆盖,则无法使用它。将负担放在最终用户身上是一个更好的解决方案 如果这不是针对库,而是针对个人项目,那么您应该简单地拒绝加载任何第三方代码,这些代码做了一些愚蠢的事情

假设您有一个脚本需要在覆盖javascript的JSON的页面上运行。stringify,您如何确保您的代码使用原始的stringify而不是重写的stringify?

如果您正在创建库,则要求
JSON.stringify
应符合标准行为

对代码提出严格要求并没有错,事实上这是一个好主意。您只需要确定要记录需求

显然,如果原始文件被永久覆盖,则无法使用它。将负担放在最终用户身上是一个更好的解决方案


如果这不是针对库,而是针对个人项目,那么您应该简单地拒绝加载任何第三方代码,这些代码做了一些愚蠢的事情,比如用不一致的方法替换一致的方法。

在覆盖之前备份
JSON。stringify
。如果您无法备份,请使用。

虽然我会选择其他答案之一,但以下是针对以下情况的解决方案:

  • 页面不能更改,因此
  • 无法在覆盖JSON.stringify并因此导致错误的代码之前运行代码
  • 代码无法保存原始函数对象(以还原它或以后显式使用它)
  • 下面是一个黑客:

  • 创建一个IFRAME元素
  • 访问IFRAME元素的
    contentWindow
    属性;然后,它应该包含原始(或“新的未触及”)JSON对象,从而包含原始的JSON.stringify函数

  • 在其他代码有机会修改之前运行您的代码?我严重怀疑你能找到在变量(或函数,如本例中)被覆盖之前的内容。。。似乎您可以创建iframe,并访问其(全新的、未修改的)内容。另外,您的问题与此问题重复,因此应该关闭。我正在构建一个带有bookmarklet的应用程序,并注意到一个网站覆盖了stringify并导致错误。因为它是一个bookmarklet,在页面不是选项之前运行它,这是一个优雅的解决方案(“首先不要有这个问题”)。丑陋的解决方案就在这里:不幸的是,优雅的解决方案在Javascript中并不总是一个选项。它非常有用。非常感谢。