假设我有 window.open(没有名称参数),分散在我的项目中,我想更改实现,以便在未指定名称的任何地方指定一个默认名称。
我想做的是将我自己的方法挂接到 window.open 上,这样每当 window.open 运行时,它都会在内部调用我自己的方法,然后调用 window.open(使用 name 参数)。
这可以通过 Javascript 实现吗?这是否会存在任何循环依赖问题,即 window.open 调用我的自定义函数,而后者又再次调用 window.open 函数?
附言简单来说,我想做的是覆盖 window.open 功能。
最佳答案
为避免循环调用,您需要将原始的 window.open
函数隐藏在一个变量中。
一个不错的方法(不会污染全局命名空间)是使用闭包。将原始 window.open
函数作为参数传递给匿名函数(下面称为 open
)。这个匿名函数是你的钩子(Hook)函数的工厂。您的钩子(Hook)函数通过 open
参数永久绑定(bind)到原始 window.open
函数:
window.open = function (open) {
return function (url, name, features) {
// set name if missing here
name = name || "default_window_name";
return open.call(window, url, name, features);
};
}(window.open);
关于javascript - 如何覆盖 window.open 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9172505/