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コンストラクターのプロトタイプで宣言されているためです。