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

标签 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);
}

看起来更清晰、更简单了。

最佳答案

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

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

但是如果您已经从原型(prototype)继承了它,那么为什么不直接将其作为方法调用。

关于javascript - 为什么必须设置原型(prototype)而不是直接在函数构造函数中调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50387350/

相关文章:

JavaScript setInterval() 和 setTimeout() 卡住浏览器

javascript - 循环 div 动画

javascript - 使用 Javascript 切换可见性 1000 多个元素,与开始和停止事件异步(用于加载图标)

node.js - 使用加密库在 NodeJS 中创建 PGP 兼容签名

node.js - 从nodejs中的文件中读取并显示它

node.js - 为棋盘游戏 session 数据保留数据时,redisJSON 是否比普通 redis 更好?

javascript - 如何在客户端 javascript 中访问 Passport 的 req.user 变量?

jquery - 如何将Node JS前端代码与后端代码分离?

javascript - 使用 JQuery 显示 JSON

javascript - 在具有不同端口号的单个服务器上运行多个 sails 项目不起作用