JS恢复默认/全局功能

时间:2012-07-09 22:35:48

标签: javascript function default global restore

这是一个假设的问题,它确实没有实际用途,但是...

让我们说你要这样做:

document.open = null;

如何将document.open恢复为原始功能,这是否可行(没有用户制作的临时存储空间)? document.open是否以不太知名的名称存储在另一个位置?谢谢! :)

3 个答案:

答案 0 :(得分:9)

覆盖document.open直接在open对象上创建名为document的变量/函数。但是,原始函数不是在对象本身而是它的原型 - 所以你确实可以恢复它。

open功能来自HTMLDocument.prototype,因此您可以使用HTMLDocument.prototype.open访问它。

要直接调用它,请使用.call()指定要在其上使用它的对象:

HTMLDocument.prototype.open.call(document, ...);

您也可以通过简单地指定它来恢复document.open

document.open = HTMLDocument.prototype.open;

但是,请记住,HTMLDocument因此document是主机对象,通常不要乱用它们 - 特别是在IE中,如果你这样做,事情可能会变得混乱。

答案 1 :(得分:4)

delete document.open;

这不直观,但在自定义函数上使用delete关键字将恢复原始函数,至少只要原型未被覆盖。

示例:

> console.log
function log() { [native code] }

> console.log = function() { }
function () { }

> console.log("Hello world");
undefined

> delete console.log;
true

> console.log("Hello world");
Hello world

与document.open和其他内置函数的工作方式相同。

答案 2 :(得分:1)

var temp = document.open;
document.open = null;

然后使用

恢复原始功能
document.open = temp;