由於XMLHttpRequest
是window
對象的屬性,因此您仍然應該可以通過它訪問它。
您還沒有真正覆蓋它,你只有陰影的window
的原生屬性,所以你嘗試任何時間打電話給XMLHttpRequest
在聲明的範圍,你重寫版本將首先遇到的作用域鏈,因此執行。如果你明確地訪問window.XMLHttpRequest
你會繞過你的重寫版本,並直接訪問本機之一:如果你沒有宣佈與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
構造函數的原型上聲明的。