我在/lib/router/index.js
潜入ExpressJS lib,它声明如下:
var proto = module.exports = function(options) {
var opts = options || {};
function router(req, res, next) {
router.handle(req, res, next);
}
// mixin Router class functions
setPrototypeOf(router, proto)
router.params = {};
router._params = [];
router.caseSensitive = opts.caseSensitive;
router.mergeParams = opts.mergeParams;
router.strict = opts.strict;
router.stack = [];
return router;
};
proto.handle = function handle(req, res, out) {
var self = this;
debug('dispatching %s %s', req.method, req.url);
var idx = 0;
var protohost = getProtohost(req.url) || ''
.........
}
我很困惑为什么他们不能通过像这样的特定方式直接调用
return function(req, res, next) {
handle(req, res, next);
}
它似乎更清晰,更简单。
答案 0 :(得分:0)
因为他们想要将其作为方法调用,所以可以访问router
实例的所有属性。不可否认,他们本可以使用
handle.call(router, req, res, next)
但如果您已经从原型中继承了它,那么为什么不直接将其称为方法。