javascript - 当需要一个类并调用另一个方法中的方法时,到底发生了什么?

标签 javascript node.js oop constructor

当类中的方法(例如 createServer())被调用时,如下所示:

const http = require("http");
const server = http.createServer();
server.listen(3000);

到底发生了什么?如果我理解正确的话,http 类是一个构造函数,而 require 函数实例化 const httpcreateServer() 是构造函数 http 的一个方法,该方法又由 http.createServer() 调用。 Node.js 文档显示 createServer() “返回 http.Server 的新实例”。

这是否意味着 createServer() 也可以用作构造函数并在已创建的实例中创建另一个实例?奇怪的是,server.__proto__ 指向函数 setTimeOut,而不是 createServerhttp

最佳答案

require() 是一个函数,并在此处使用String "http" 进行调用。 然后,Node.js 查找 http module,对其进行解释,然后 require() 返回一个带有给定模块导出的 Object。所以模块require()d,它可以导出多个东西,而不仅仅是一个

JavaScript 中的对象在其他语言中被称为“字典”“ map ”,将值与String类型的键相关联。 (Map 后来被添加到 JavaScript 中,并且可以具有任何类型的键。)

createServer() 只是此对象“createServer” 键下的一个函数。调用时,它返回另一个对象,即类http.Server实例。它可以被称为工厂函数。查看其实现 here

listen() 反过来又类似于该 Object 中的一个函数,换句话说,是 类 http.Server 的一个方法

它们都不是构造函数,它们是通过 new 关键字调用的,如:new http.Server()

server.constructor === http.Server

关于javascript - 当需要一个类并调用另一个方法中的方法时,到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54973096/

相关文章:

javascript - 如何在自定义 CMS 中嵌入或重新创建 Google Analytics Graph

javascript - 无法从每个语句中获取正确的值

javascript - knockout : multiple valueUpdates and choose which update happend

node.js - 无法使用 @azure/storage-blob 中的 uploadFile 方法设置内容类型(SDK/NPM)

javascript - pm2启动创建奇怪的文件

java - 使工厂方法更具动态性

c++ - 使用 PIMPL 习惯用法,实现是否应该始终是类的私有(private)成员?

javascript - 使用 javascript 或 d3js 解析 csv : how to skip a column?

node.js - Mongoose:为什么 $addtoset 添加不正确的 ObjectId

c# - 在抽象类的构造函数中通过虚拟成员分配只读字段