这是一个假设的问题,它确实没有实际用途,但是...
让我们说你要这样做:
document.open = null;
如何将document.open恢复为原始功能,这是否可行(没有用户制作的临时存储空间)? document.open是否以不太知名的名称存储在另一个位置?谢谢! :)
答案 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;