Monkeypatch Javascript构造函数

时间:2014-10-29 18:11:39

标签: javascript xmlhttprequest monkeypatching zip.js

我已经阅读了我能找到的所有其他相关答案,但没有一个有效。基本上,我想做这个来源: https://github.com/gildas-lormeau/zip.js/blob/master/WebContent/zip-ext.js

在第93行向the XMLHttpRequest添加一些自定义标头。由于HTTPRangeReader包含在匿名函数中,我无法直接对它进行monkeypatch,而且似乎唯一的选择是monkeypatch XMLHttpRequest构造函数。我只需要调用默认构造函数,然后在返回新对象之前调用setRequestHeader()一次或多次。

1 个答案:

答案 0 :(得分:0)

使用别名克隆原件,然后在方法覆盖中引用它:



    function handler()
      {
      console.log(JSON.stringify(arguments));
      }

    /* Avoid stack overflow */
    if (XMLHttpRequest.prototype.mySetRequestHeader === undefined)
      { 
      XMLHttpRequest.prototype.mySetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;
      }

    /* Override prototype method */
    XMLHttpRequest.prototype.setRequestHeader = function baz(foo, bar)
      {
      XMLHttpRequest.prototype.mySetRequestHeader.call(this, 'foo', 'bar');
      XMLHttpRequest.prototype.mySetRequestHeader.call(this, 'bar', 'baz');
      
      }

    /* Test the override */
    with (new XMLHttpRequest)
      {
      open('GET', location.href);
      setRequestHeader("referer","http://www.example.com");
      send("");
      onreadystatechange = handler;
      }




<强>参考