为什么Javascript中函数调用后会有一个点?

为什么Javascript中函数调用后会有一个点?,javascript,node.js,express,Javascript,Node.js,Express,在express.js中,为什么是 .Server(app); 作为声明有效吗 var http = require('http').Server(app); require()不是一个函数,不是一个对象吗?调用require函数返回一个对象,其中Server是一个成员/字段。require是一个函数。但是,require(…)可以是特定CommonJS模块使用module.exports=…导出的任何内容 此外,函数也是对象。即使require(…)是一个函数,它也可以有一个属性。Node

在express.js中,为什么是

.Server(app);
作为声明有效吗

var http = require('http').Server(app);

require()
不是一个函数,不是一个对象吗?

调用
require
函数返回一个对象,其中
Server
是一个成员/字段。

require是一个函数。但是,
require(…)
可以是特定CommonJS模块使用
module.exports=…
导出的任何内容

此外,函数也是对象。即使
require(…)
是一个函数,它也可以有一个属性。Node.js中的CJS模块提供默认导出为
require(…)
,而命名导出可以作为属性访问,这是一个常见的方法。如果默认导出是一个函数,它是:

function defaultFooExport() {...}

defaultFooExport.namedFooExport = ...;

module.exports = defaultExport;
因此,可以将其导入为:

const foo = require('foo');
const { namedFooExport } = require('foo');
require()不是函数,不是对象吗

require
是解析为函数的变量

require()
是一个表达式,其计算结果为无参数调用该函数的返回值

该返回值可能是一个对象

require()不是函数,不是对象吗

函数是JavaScript中的对象:

console.log(函数(){}对象实例)调用此方法

require
函数返回一个
对象
,该
对象
将有一个名为
Server
的键,这是一个函数。您可以将参数传递给require和Server函数

最简单的例子是这样的

功能要求(msg){
控制台日志(msg);
返回{
“服务器”:功能(消息){
控制台日志(msg)
}
}
}
require(“require message”).Server(“some message”);
要求(“仅要求呼叫”);

require(“通过服务器调用require”).Server(“这是一个链接调用…”)在java脚本中,有几种方法可以实现模块模式,如“匿名闭包”、“类似于JQuery模块的全局导入”、CommonJS required、AMD UMD等。因此,当我们通过导入或required使用模块时,我们在内部获得对对象的引用。获得对象后,我们通过“.”运算符调用对象中的方法。因此,在“var http=require('http').Server(app);”的情况下,我们首先在var http中创建对象引用,然后通过将app作为参数传递来调用该对象中存在的方法“Server(app)”。这是一篇很好的文章,有助于理解更多的需求以及它是如何工作的。

今天,我尝试修复关于我们项目的javascript错误,许多错误是由空值或未定义的值引起的。比如说

Cannot read property 'render' of null
Cannot read property 'message' of undefined
o.size is not a function
require('xxx'),如果您不知道其退货情况,请在使用前做出判断。例如:

属性

if(res){
  console.log(res.message);      
  //....your statement.....
}
作用

if(o && o.size){
  console.log(o.size());
  //....your statement.....
}

require
是一个函数,但它返回一个对象。正如@Teemu所说,“require”返回一个对象。这里,以顺序或链式方法var http=require('http').Server(app)编写;这只是意味着,var http=require('http');var server=http.server(app);Teemu说了些什么,如果你想了解这个主题,你可能还想查找“方法链接”的可能副本。另外,
Server
是用大写字母写的,这可能会有点让人困惑——这与正常函数的JS风格相反。我认为express人员这样做是为了强调
Server()
调用返回服务器对象并有效地充当其构造函数