当需要expression时,它是一个函数还是一个对象?

当我将快递带入我的项目并创build一个新的快递应用程序时,我从这两行代码开始

var express = require('express'); var app = express(); 

这在我看来像express是一个函数,返回我创build的app对象。 但后来我可以使用express.static() ,这使得我认为expressstatic方法的一个对象。

 app.use(express.static('public')); 

当我需要express它似乎logging一个对象,所以我很好奇如何express()返回的东西,如果它是一个对象? 我最后的猜测是express是一个函数,但是因为这是javascript, 函数是对象 ,它也可以有属性? 这些接近准确吗?

都。 这是一个函数,它是一个对象 – 不仅在JavaScript中的每个函数都是一个对象。 它实际上已经定义了一些自定义属性,如express.static ,使用它像一个普通的对象。

为了演示它,假设你有一个简单的模块,输出一个像Express一样的函数

 'use strict'; function x() { return 'x'; } xa = 1; xb = 'b'; xc = () => 'c'; xd = {a: 1, b: 2, c: 3}; module.exports = x; 

现在,当你需要你的模块,例如

 var x = require('./x'); 

你可以做:

 console.log( x() ); 

但也:

 console.log( xa ); console.log( xb ); console.log( xc() ); console.log( xda );