“删除”-恢复本机功能不适用于更改后的原型,那么怎么办?

2023-11-25

如果你像这样改变本机函数:

window.open= function (a,b,c)
{
    alert(2);
}

然后你就可以

delete window.open

它会恢复原来的功能,但是:

如果你像这样改变它的原型:

window.__proto__.open= function (a,b,c)
{
    alert(3);
}

then delete不会做任何事情=\有什么想法现在如何恢复它吗?


当你改变时window.open到其他事情,例如使用window.open = 'something else';,那么你就是影子 the open原型中的方法;

// Looking up window.open (in the prototype chain)....
window.open;           // Found, result == 'something else'
window.__proto__.open; // Not accessible any more (shadowed by previous line)

调用后delete window.open删除'something else',原来的方法再次变得可见,因为它从未从原型链中消失。

但如果你修改了open原型上的方法,例如window.__proto__.open = bogus;,那么你就不能轻易恢复旧方法了。因此,要再次获得“打开窗口”行为,您需要在替换原始方法之前保留对原始方法的引用,

var original_open = window.open;
window.__proto__.open = 'bogus';
// .... whatever ....
// Now restore it:
window.__proto__.open = original_open;

或者从别人那里借用window,例如使用临时新框架:

var frame = document.createElement('iframe');
document.body.appendChild(frame);
window.__proto__.open = frame.contentWindow.open;
frame.parentNode.removeChild(frame);

但这整个想法很荒谬:你不应破坏内置方法.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“删除”-恢复本机功能不适用于更改后的原型,那么怎么办? 的相关文章

随机推荐

  • 将多个本机 DLL 合并为一个 DLL

    我有很多小的 DLL 我想将它们制作成一个大的 呃 DLL 如在这里建议 我可以通过合并我的项目来做到这一点 但我想要一种侵入性较小的方式 多个DLL可以合并为一个单元吗 快速搜索发现这个线程声称这是不可能的 还有人知道吗 请注意 我谈论的
  • 关闭Form时出现异常(线程+调用)

    我刚刚开始学习c 中的线程和方法调用 但我遇到了一个我找不到解决方案的问题 我制作了一个基本的 C 表单程序 它通过启动线程并调用委托来不断更新和显示数字 在 Form1 load 上启动新线程 private void Form1 Loa
  • Spring security - 如何提及基于表单的身份验证和基本身份验证

    是否可以使用名称空间配置在 Spring security 中提及基于表单的身份验证和基本身份验证 而不覆盖其他身份验证 这样应用程序就可以为基于浏览器的请求和远程客户端提供服务 The grimesjm 的回应是对的 但是 如果您使用 S
  • Java中栈帧的内容

    从Java虚拟机实现中可以明显看出 http docs oracle com javase specs jvms se7 html index html 该堆栈帧存在于堆上 用于存储方法的运行时数据 但是java中栈帧的内容是什么以及栈帧是
  • 让div占据100%的身体高度,减去固定高度的页眉和页脚[重复]

    这个问题在这里已经有答案了 根据我的研究 这似乎是一个绝对经典的 CSS 问题 但我找不到明确的答案 所以 StackOverflow 就是这样 如何设置内容 div 占据正文高度的 100 减去固定高度页眉和页脚所占据的高度
  • 在 C# 中使用 LINQ 从名称值列表中获取 4 个元素的组

    我想循环遍历这个名称值对列表 并将它们分成 4 个一组 数据会是这样的 value1 1 value2 1 value3 1 value4 1 value1 2 value2 2 value3 2 value4 2 它会将其分组为 1 个列
  • 仅使用 css 换行(如

    是否可以在纯CSS中 即不添加额外的html标签 进行换行 例如 br 我想要在之后换行 h4 元素 但不在之前 HTML li Text text text text text h4 Sub header h4 Text text tex
  • 具体来说,VMMap 如何知道给定的内存区域是线程堆栈?

    我一直在使用 Mark Russinovich 的 VMMap 来为我正在分析的进程映射虚拟内存 使用 VirtualQueryEx 我可以遍历外部进程的空间并获取有关进程地址空间内的内存区域的信息 当然 这些区域与 VMMap 匹配 但
  • std::function 可以用来存储带有可变参数的函数吗[重复]

    这个问题在这里已经有答案了 我有一个在应用程序中传递的结构 其中包含一堆回调函数 typedef struct std function
  • 从 pyenv-virtualenv 切换到 pipelinev 时保持相同的共享 virtualenv

    我开始看pipenv看起来还不错 我唯一担心的是 我的大部分项目都涉及numpy scipy和其他一些不那么小的图书馆 目前管理我的项目的方式 I have pyenv and pyenv virtualenv安装 我有一些 目前是 4 个
  • 选择/取消选择所有按钮以进行闪亮的变量选择

    我有这样的语句 可以让我获得有关变量的基本描述性统计数据 checkboxGroupInput show vars Columns in diamonds to show names input data selected names in
  • 如何将模型从视图传递到局部视图?

    我有一个观点是not强类型 然而 在这个视图中 我有一个强类型的部分视图 如何将模型传递给这个强类型视图 我尝试过类似的东西 public ActionResult Test MyData new Data MyData One 1 ret
  • 如何找到 Azure 存储帐户上的热 LRS 写入操作的来源?

    我们使用 Azure 存储帐户来存储我们的应用程序应根据用户需求下载的一些文件 尽管不应该有写入操作 至少我能想到没有 但在计费周期的几天后 我们就超出了包含的写入操作 见图 就价格而言 还在限制范围内 但我还是想知道这是否正常 以及如何分
  • Result 变量是从函数的第一行定义的吗?

    我需要澄清这个案子 根据我的测试 结果变量定义为 从第一行开始 Boolean False Integer 0 String Object nil 等 但我从未见过这方面的官方参考 这也是有道理的 因为这给出了暗示 DCC 警告 Unit1
  • Nodejs (Express) 连接 MySQL - 本地连接和远程连接不同吗?

    伙计们 我正在学习如何使用Express连接远程MySQL 因此 我开始在本地计算机 本地 MySQL 服务器 上进行此操作 在我有了之后在本地环境下成功了 我尝试更改与远程 MySQL 托管 位于 DB4Free 的连接 是的 我有在本地
  • 如何在 Bash 脚本中解析 CSV?

    我正在尝试解析包含可能超过 100k 行的 CSV 这是我的标准 标识符的索引 标识符值 我想检索 CSV 中给定索引 以逗号分隔 中具有给定值的所有行 有什么想法 特别考虑性能吗 作为替代方案cut or awk基于单行 你可以使用专门的
  • TFS Build 找不到 Grunt

    我已经在 TFS 构建服务器上安装了 npm 和 grunt 我使用安装了 grunt clinpm 安装 g grunt cli然后就可以运行了咕噜部署以我自己身份登录时从命令行 Out TFS 构建运行为tfs服务尽管用户 并且当它尝试
  • ZendDeveloperTools 模块在 ZF2 beta5 中不显示工具栏

    我正在尝试安装ZendDeveloperTools模块用于ZF2测试版5 以下是我到目前为止所遵循的步骤 安装成功ZendSkeletonApplication 将模块下载到我的 vendor目录 启用该模块 config applicat
  • 如何在 MySQL 中将 BLOB 转换为 TEXT?

    我有大量记录 其中文本存储在 MySQL 的 blob 中 为了便于处理 我想将数据库中的格式更改为文本 有什么想法可以轻松地进行更改以免中断数据 我想它需要正确编码 那是不必要的 只需使用SELECT CONVERT column USI
  • “删除”-恢复本机功能不适用于更改后的原型,那么怎么办?

    如果你像这样改变本机函数 window open function a b c alert 2 然后你就可以 delete window open 它会恢复原来的功能 但是 如果你像这样改变它的原型 window proto open fu