node.js中关于moudule.exports的导出对象问题。

因为express库使用时是

var express = require('express')
var app = express()
var router = express.Router()

所以express这部分源码应该是(我在github上没搜到源码..)

module.exports = function express(){
  ...
}
module.exports.Router = function Router(){
 ... 
}

module.exports的源码中我记得是

module.exports = {}

module.exports是初始化为一个{}空对象,那是怎么它被一个function赋值呢?

是相当于把exports重新指向一个function对象么?

那么已经指向了function对象是怎么再给这个function对象添加一个Router属性呢?


看到评论里面有大佬回复说可以,我去测试了一下,的确可以!
好像也对,毕竟js是一切皆object,应该是可以的。
所以现在想问:是怎么给一个function对象添加属性?如果要写,是写成什么样的形式呢?比如:
var c = {
function(){},
}(我蒙的)

阅读 4.2k
1 个回答

你的猜测很正确,源码的确是这样的。

// 直接赋值为function,即之后调用的函数var express = require('express');var app = express()
exports = module.exports = createApplication;
function createApplication() {
    ...
}

// 之后直接给export设置其他属性,如你说的var router = express.Router()
exports.request = req;
exports.response = res;
exports.Route = Route;
exports.Router = Router;

这样就实现了,给函数设置Router属性,附源码地址,望采纳

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题