像Superagent这样的语法,我该怎么做?

时间:2014-04-26 21:35:23

标签: javascript node.js superagent

前几天我正在查看Superagent模块,我想知道应该如何制作代码来同时支持request('url', callback);request.get('url').end(callback);这样的语法。< / p>

我试着查看来源,但我不明白它是如何制作的。

谁能告诉我怎么办呢?

1 个答案:

答案 0 :(得分:2)

如果您尝试使用类似的API定义模块......

JavaScript中的

Function是一种Object,因此可以传递对它们的引用,并且可以为它们指定属性,包括其他function作为方法。

在这种情况下,request is just a functionget assigned as one of its properties

function request(method, url) {
  // ...

  return new Request(method, url);
}

request.get = function(url, data, fn){
  var req = request('GET', url);

  // ...

  return req;
};

使用其中之一时,值return ed为Request instance,其中an end method继续return该实例。

Request.prototype.end = function(fn) {
  // ...

  return this;
};

这允许fluent API method chaining

request
  .get('...', function () {})
  .end(function () {});
  .end(function () {});
// that does the same as...
var req = request.get('...', function () {});
req.end(function () {});
req.end(function () {});