9

これは仮説的な質問であり、実際には実用的ではありませんが...

あなたがしなければならなかったとしましょう:

document.open = null;

document.open を元の機能に復元するにはどうすればよいですか? これは可能ですか (ユーザーが作成した一時ストレージなしで)? document.open はあまり知られていない名前で別の場所に保存されていますか? ありがとうございました!:)

4

3 に答える 3

10

上書きすると、オブジェクトに直接document.open指定された変数/関数が作成されます。ただし、元の関数はオブジェクト自体ではなく、そのプロトタイプにあったため、実際に復元できます。opendocument

open関数は from であるため、HTMLDocument.prototypeを使用してアクセスできますHTMLDocument.prototype.open

直接呼び出すには、使用.call()するオブジェクトを指定します。

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

document.open割り当てるだけで復元することもできます。

document.open = HTMLDocument.prototype.open;

ただし、HTMLDocumentdocumentはホスト オブジェクトであり、通常はそれらをいじらないことをお勧めします。特に IE では、そうすると事態が混乱する可能性があります。

于 2012-07-09T22:38:54.947 に答える
5
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 およびその他の組み込み関数と同じように機能します。

于 2013-06-21T02:09:29.420 に答える
1
var temp = document.open;
document.open = null;

そして、元の機能を復元します

document.open = temp;
于 2012-07-09T22:36:21.520 に答える