XMLHttpRequest
はwindow
オブジェクトのプロパティであるため、それでもそのオブジェクトにアクセスできるはずです。あなたが実際にそれを上書きしていない
、あなたはあなたの宣言のスコープでXMLHttpRequest
を呼び出そうとする任意の時間は、あなたのオーバーライドされたバージョンは、スコープチェーンに最初に遭遇し、そのために実行されますので、window
のネイティブプロパティを唯一の影にしています。あなたが明示的window.XMLHttpRequest
にアクセスした場合、あなたはあなたのオーバーライドされたバージョンを迂回し、直接ネイティブの1にアクセスします:あなたはvar
キーワードとバージョンを宣言していなかった場合、あなたが実際にネイティブ関数をオーバーライドして、中にいるであろうと
var XMLHttpRequest = function() {
console.log('example');
}
var request = new XMLHttpRequest(); //Calls the above function
var request2 = new window.XMLHttpRequest(); //Calls the native function
注意をあなたは新しいプロパティを削除することによって(ただし、Internet Explorerで)それを取り戻すことができ、その場合:
delete window.XMLHttpRequest;
編集
私はちょうど再上述のことは少し誤解を招く。 var
キーワードを省略した場合、元の関数を実際に上書きすることはなく、まだシャドーイングしています。これは、元の関数がwindow
コンストラクタのプロトタイプで宣言されているためです。