XMLHttpRequest
はオブジェクトのプロパティであるため、それwindow
を介してアクセスできるはずです。
実際には上書きしていません。ネイティブ プロパティをシャドウしているだけなwindow
ので、宣言のスコープで呼び出そうとするとXMLHttpRequest
、オーバーライドされたバージョンがスコープ チェーンで最初に検出され、実行されます。明示的にアクセスwindow.XMLHttpRequest
する場合は、オーバーライドされたバージョンをバイパスし、ネイティブ バージョンに直接アクセスします。
var XMLHttpRequest = function() {
console.log('example');
}
var request = new XMLHttpRequest(); //Calls the above function
var request2 = new window.XMLHttpRequest(); //Calls the native function
キーワードでバージョンを宣言していない場合、var
実際にはネイティブ関数をオーバーライドしていることに注意してください。その場合、新しいプロパティを削除することで元に戻すことができます (ただし、Internet Explorer ではできません)。
delete window.XMLHttpRequest;
編集
上記が少し誤解を招くことに気づきました。キーワードを省略した場合var
、元の関数を実際に上書きすることはなく、単にそれを隠しているだけです。これは、元の関数がwindow
コンストラクターのプロトタイプで宣言されているためです。