当读取connect.js源代码时,我无法理解这行代码:
function app(req, res, next){ app.handle(req, res, next); }
问题是:app
定义在哪里? app.handle(req, res, next);
https://github.com/senchalabs/connect/blob/master/lib/connect.js#L28
答案 0 :(得分:0)
app
在proto.js
:https://github.com/senchalabs/connect/blob/45fe02dde8b1f1da0dde0c593038753714f1d99b/lib/proto.js#L87
在JavaScript中,函数是具有属性的对象。在app
定义下方的行中,他们使用utils-merge合并proto.js
中的属性:
merge(app, proto);
答案 1 :(得分:0)
app
在function app(....
的第一行中定义。
但是app
merge
通过proto
行使用util-merge merge(app,proto)
扩展了EventEmitter.prototype
。
另请注意与proto.js
合并,因为这也很重要。
查看与connect.js
位于同一目录中的app
文件,您将看到导出的完整function createServer() {
function app(req, res, next){ app.handle(req, res, next); }
merge(app, proto);
merge(app, EventEmitter.prototype);
app.route = '/';
app.stack = [];
return app;
}
对象。
{{1}}
答案 2 :(得分:0)
function app(req, res, next){ app.handle(req, res, next); }
// ^^^ ^^^
它就在那里定义。
handle
函数稍后使用app
添加到merge(app, proto)
{在proto.js文件中定义)。
以下是代码执行操作的简单示例:
function dog () {
dog.bark();
};
dog.bark = function () {
console.log('Woof!');
};
dog();