前几天我正在查看Superagent模块,我想知道应该如何制作代码来同时支持request('url', callback);
和request.get('url').end(callback);
这样的语法。< / p>
我试着查看来源,但我不明白它是如何制作的。
谁能告诉我怎么办呢?
答案 0 :(得分:2)
如果您尝试使用类似的API定义模块......
JavaScript中的 Function
是一种Object
,因此可以传递对它们的引用,并且可以为它们指定属性,包括其他function
作为方法。
在这种情况下,request
is just a function
与get
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 () {});