Javascript 如何在DOM对象原型中更改方法

Javascript 如何在DOM对象原型中更改方法,javascript,prototype-programming,Javascript,Prototype Programming,我想更改XMLHttpRequest对象中的open()方法。实际上,我需要更改通过xhr发送的每个url。我该怎么做 例如,当xhr对象打开一个http://domain.com/我想把它改成https://domain.com/您可以在本机DOM对象上插入任何方法,但不建议这样做。不要这样做 无论如何,如果您想知道如何操作XMLXttpRequest的open方法,下面是您的操作方法: var open = XMLHttpRequest.prototype.open; XMLHttpRequ

我想更改
XMLHttpRequest
对象中的
open()
方法。实际上,我需要更改通过xhr发送的每个url。我该怎么做


例如,当xhr对象打开一个
http://domain.com/
我想把它改成
https://domain.com/

您可以在本机DOM对象上插入任何方法,但不建议这样做。不要这样做

无论如何,如果您想知道如何操作
XMLXttpRequest
open
方法,下面是您的操作方法:

var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(){ 
   // do stuff you want 
   // for example console.log:
   console.log('test');
   // then let open method happen
   open.apply(this, arguments);
}
对于正在更改URL的
协议的用例,您可以执行以下操作:

var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(){ 
   var link = document.createElement('a'); // make an anchar element
   link.href = arguments[1]; // make it's href equal to second argument which is URL
   link.protocol = 'https:'; // force https to the link
   arguments[1] = link.href; // write back URL form link that is now start with 'https'
   // then let open method happen
   open.apply(this, arguments);
}

我不建议您实际更改默认方法。只需创建您自己的函数,返回您喜欢的XHR对象即可。这是可能的,但无论如何,更改本机构造函数(甚至更多现有构造函数)的原型都是糟糕的做法。如果您或未来的扩展需要使用
http
协议发出请求,该怎么办?亲爱的mohesen,我有一个问题,希望你能回答我:我如何通过javascript捕获所有http请求?我需要把它们全部换掉