【问题标题】:Monkeypatch Javascript constructorMonkeypatch Javascript 构造函数
【发布时间】:2014-12-25 14:13:10
【问题描述】:

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

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

【问题讨论】:

    标签: javascript xmlhttprequest monkeypatching zip.js


    【解决方案1】:

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

        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;
          }

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 2018-06-09
      相关资源
      最近更新 更多