使用对象作为函数

时间:2019-06-21 18:55:39

标签: javascript node.js express

我有一个问题与使用快速应用程序对象(应用程序对象)作为回调函数有关。据我所知,一个快速应用程序是一个具有方法和属性的对象,可以帮助路由HTTP请求。要将应用程序对象与HTTP服务器一起使用,我们将其用作此服务器的回调函数:

var app = express();
// ...
var server = http.createServer(app);

Router对象也是如此:

var app = express();
var router = express.Router();
// ...
app.use('/', router);

我想知道如何将对象视为函数。一个函数确实是从Object类继承的,但是据我所知,它没有像应该在快速应用程序中那样的方法和属性。

1 个答案:

答案 0 :(得分:0)

在Javascript对象层次结构中,函数是对象的一种。不仅可以调用函数,而且还可以像普通对象一样具有属性。您可以将其视为函数对象从普通对象继承而来。

因此,在您的示例中使用express时,它是一个函数,并且还具有属性。

因此,您可以直接调用它:

var app = express();

而且,您可以访问其属性:

var router = express.Router();

您可以使用自己的功能来做到这一点:

function myFunc() {
   console.log("hello");
}

myFunc();    // outputs "hello"

myFunc.greeting = "goodbye";

console.log(myFunc.greeting);   // outputs "goodbye"

而且,您甚至可以像这样将它们组合起来:

function myFunc() {
   console.log(myFunc.greeting);
}

myFunc.greeting = "goodbye";

myFunc();    // outputs "goodbye"

请注意,Express库不必像以前那样设计它。他们可以导出具有多个属性的普通对象,其中该普通对象上的一个属性是express函数,并使它像这样工作:

const expressLib = require('express');
const app = expressLib.Express();

const server = http.createServer(app);

const router = expressLib.Router();
app.use('/', router);

因此,将express函数设为主要输出并将属性置于该函数上,而不是导出具有所有属性(包括express函数)的普通对象,这只是API设计的选择。 / p>