我有一个问题与使用快速应用程序对象(应用程序对象)作为回调函数有关。据我所知,一个快速应用程序是一个具有方法和属性的对象,可以帮助路由HTTP请求。要将应用程序对象与HTTP服务器一起使用,我们将其用作此服务器的回调函数:
var app = express();
// ...
var server = http.createServer(app);
Router对象也是如此:
var app = express();
var router = express.Router();
// ...
app.use('/', router);
我想知道如何将对象视为函数。一个函数确实是从Object类继承的,但是据我所知,它没有像应该在快速应用程序中那样的方法和属性。
答案 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>