为什么必须在函数构造函数中直接设置原型而不是直接调用方法?

时间:2018-05-17 08:58:45

标签: javascript node.js express

我在/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);
}

它似乎更清晰,更简单。

1 个答案:

答案 0 :(得分:0)

因为他们想要将其作为方法调用,所以可以访问router实例的所有属性。不可否认,他们本可以使用

handle.call(router, req, res, next)

但如果您已经从原型中继承了它,那么为什么不直接将其称为方法。