阅读connect.js源的时候,我不明白这行代码:在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
阅读connect.js源的时候,我不明白这行代码:在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
app
在proto.js
定义:https://github.com/senchalabs/connect/blob/45fe02dde8b1f1da0dde0c593038753714f1d99b/lib/proto.js#L87
在JavaScript中,函数是做有属性的对象。在下面的app
定义的线,它们合并使用utils-merge从proto.js
属性:
merge(app, proto);
app
是与function app(....
第一行定义。
然而,app
由merge
膨胀-ing经由管线merge(app,proto)
使用util-merge的proto
模块。
另请注意合并EventEmitter.prototype
,因为这也很重要。
查看与connect.js
位于同一目录中的proto.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;
}
function app(req, res, next){ app.handle(req, res, next); }
// ^^^ ^^^
它定义在那里。 将handle
函数添加到app
以后(在proto.js文件中定义),使用merge(app, proto)
。
这里的代码做什么简单的例子:
function dog() {
dog.bark();
};
dog.bark = function() {
console.log('Woof!');
};
dog();
谢谢,我想用'proto.app'是在这条线更加清晰。 – why 2015-02-23 14:08:50