几天前,我正在研究Superagent模块,我想知道如何编写代码以同时支持类似request('url', callback);
和类似的语法request.get('url').end(callback);
。
我试图查看源代码,但我不明白它是如何制作的。
谁能告诉我该怎么做?
几天前,我正在研究Superagent模块,我想知道如何编写代码以同时支持类似request('url', callback);
和类似的语法request.get('url').end(callback);
。
我试图查看源代码,但我不明白它是如何制作的。
谁能告诉我该怎么做?
如果您尝试使用类似的 API 定义模块...
Function
JavaScript 中的 s 是 的一种Object
,因此可以传递对它们的引用,并且可以为它们赋予属性,包括其他function
s 作为方法。
在这种情况下,request
它只是一个function
被get
赋值为它的属性之一:
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
实例,它有一个end
延续到实例的方法return
。
Request.prototype.end = function(fn) {
// ...
return this;
};
request
.get('...', function () {})
.end(function () {});
.end(function () {});
// that does the same as...
var req = request.get('...', function () {});
req.end(function () {});
req.end(function () {});