在express.js中,为什么
.Server(app);
作为声明有效吗?
var http = require('http').Server(app);
不是require()
是一个函数,而不是一个对象吗?
答案 0 :(得分:0)
对require
函数的调用返回一个对象,其中Server
是成员/字段。
答案 1 :(得分:0)
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');
答案 2 :(得分:0)
require()不是函数,不是对象吗?
require
是可解析为函数的变量。
require()
是一个表达式,其计算结果为不带参数调用该函数的返回值。
该返回值大概是一个对象。
答案 3 :(得分:0)
require()不是函数,不是对象吗?
函数是JavaScript中的对象:
console.log(function() {} instanceof Object);
函数实际上确实具有属性,最著名的是.call
,.apply
和.bind
。因此,如果那是正在发生的事情,那仍然会很好。
但是,该代码未尝试访问功能Server
的属性require
。
它访问通过调用Server
返回的值的属性require('http')
。该值可以是任何类型(但可能是对象)。因此,让我们快速浏览一下以了解JavaScript中的数据类型和属性访问。
JavaScript中有7种数据类型:
前6个所谓的“原始”类型。如您所见,我没有列出数组,函数,正则表达式,日期等。这是因为它们都是Object类型的。它们可能具有某些特殊的内部行为(例如,函数是可调用的),但它们仍然是对象。
对象具有可以通过点表示法访问的属性:
x.y
但是,即使"foo".match(...)
实际上是原始值,而不是对象,您也可以执行"foo"
。这是可能的,因为JavaScript为Boolean,Number和String原语类型提供了“对象包装器”(这就是我们拥有Boolean
,Number
和String
构造函数的原因)。当您执行primitiveValue.something
时,primitiveValue
会在内部(临时)转换为其等效的Object。
仅当您尝试访问无法转换为对象的值的属性时,访问才会失败。
var foo = null;
foo.bar;
答案 4 :(得分:0)
此方法称为chaining/cascading methods。
myarray.filter(compose(equals("find me"), MyClass.prototype.getName.bind));
函数返回一个require
,即Object
将具有一个称为object
的键,该键是一个函数。您可以将参数传递给require和Server函数。
一个最小的例子就是这样
Server
答案 5 :(得分:0)
今天,我尝试修复有关我们项目的javascript错误,其中许多错误是由null或未定义的值引起的。例如
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.....
}
答案 6 :(得分:-1)
有几种方法可以在Java脚本中完成模块模式,例如“匿名闭包”,“像JQuery模块一样全局导入”,CommonJS必需,AMD UMD等。因此,当我们通过导入使用模块或要求内部获取时对对象的引用。一旦获得对象,便通过“。”调用对象中的方法。操作员。因此,在“ var http = require('http')。Server(app);”的情况下)我们首先在var http中创建对象引用,然后通过将app作为参数传递来调用存在于该对象中的方法“ Server(app)”。 Writing Modular JavaScript With AMD, CommonJS & ES Harmony是一篇很好的文章,可以帮助您更多地了解需求和运作方式。