当需要表达时,它是函数还是对象?

时间:2017-03-06 16:49:21

标签: javascript node.js express

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

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

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

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

当我需要express时,它似乎记录了一个对象,所以我很好奇express()如果它是一个对象,它会返回什么内容?我最后的猜测是express是一个函数,但因为这是javascript,functions are objects并且它也可以有属性?这些都接近准确吗?

1 个答案:

答案 0 :(得分:2)

两者。它是一个函数,它是一个对象 - 不仅在某种意义上,JavaScript中的每个函数都是一个对象。它实际上定义了一些自定义属性,比如express.static,就像普通对象一样使用它。

为了演示它,我们假设您有一个简单的模块,它可以导出一个像Express

这样的函数
'use strict';
function x() {
    return 'x';
}
x.a = 1;
x.b = 'b';
x.c = () => 'c';
x.d = {a: 1, b: 2, c: 3};
module.exports = x;

现在当您需要模块时,例如

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

你可以这样做:

console.log( x() );

但也是:

console.log( x.a );
console.log( x.b );
console.log( x.c() );
console.log( x.d.a );