Javascript Node - 创建一个初始化为函数返回值的类?

时间:2018-01-21 07:35:20

标签: javascript node.js xmlhttprequest prototype

因此,sinon测试框架具有函数sinon.useFakeXMLHttpRequest(),它将生成伪造的XMLHttpRequest对象。

我有一个实现modules.extensions的javascript文件。我可以将XMLHttpRequest的任何实现传递到该javascript文件中。所以基本上是一个polyfill?

  // app.js
  function getAjaxCallData(url) {
    let xhr = new XMLHttpRequest();
    // ... work done here
    return resultBody;
  }

  // custom.js
  if (this.modules) { // node js
    // app.js: let customAjaxRequest = require("custom")(require("xmlhttprequest").XmlHttpRequest);
    this.modules.exports = function(xmlHttpRequest) {
      if (xmlHttpRequest) this.XMLHttpRequest = xmlHttpRequest;
      return { getAjaxCallData:  getAjaxCallData};
    }
  }

来自代码中的评论。您是否注意到XMLHttpRequest是如何传递到javascript文件的?

  

让customAjaxRequest =   要求("自定义&#34)(要求(" XMLHttpRequest的"。)的XmlHttpRequest);

我的困境是需要(" xmlhttprequest")。XmlHttpRequest是一个类。而sinon.useFakeXMLHttpRequest()是一个函数。

我想要类似的东西:

  

让customAjaxRequest =   要求("自定义&#34)(wrapAsClass(s​​inon.useFakeXMLHttpRequest));

有没有办法创建一个只能在"新XMLHttpRequest()"上工作的类?是调用sinon.useFakeXMLHttpRequest()并返回它而不是正在创建的对象?或者创建一个空对象...并调用sinon.useFakeXMLHttpRequest()并将其所有内容复制到空的新创建的对象中?

1 个答案:

答案 0 :(得分:0)

找到它。您只需使用该函数,就好像它是一个类。这是有道理的。因为在ES6之前,通过使用函数定义了一个类。但我不确定在函数中返回一个对象会产生什么影响。使用this.property = value;在函数中是如何添加属性。至少当你没有在函数中返回任何东西时。



class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }
}

let y = function(width, height) { return new Rectangle(width, height); };

document.getElementById("output1").innerHTML = JSON.stringify(new Rectangle(15, 17));
document.getElementById("output2").innerHTML = JSON.stringify(new y(5, 7)); // It works!!!

<div id="output1"></div>
<div id="output2"></div>
&#13;
&#13;
&#13;

输出

  

{&#34;宽度&#34;:15,&#34;高度&#34; 17}

     

{&#34;宽度&#34;:5,&#34;高度&#34;:7}