Зачем устанавливать прототип вместо вызова методов непосредственно в конструкторе функции? - PullRequest
0 голосов
/ 17 мая 2018

Я погружаюсь в ExpressJS lib на /lib/router/index.js, он объявляет как показано ниже:

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 голосов
/ 17 мая 2018

Поскольку они хотят вызвать его как метод с доступом ко всем свойствам экземпляра router.Следует признать, что они могли бы использовать

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

, но если вы уже унаследовали его от своего прототипа, то почему бы просто не вызвать его как метод напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...