当类中的方法(例如 createServer()
)被调用时,如下所示:
const http = require("http");
const server = http.createServer();
server.listen(3000);
到底发生了什么?如果我理解正确的话,http
类是一个构造函数,而 require 函数实例化 const http
。 createServer()
是构造函数 http
的一个方法,该方法又由 http.createServer()
调用。 Node.js 文档显示 createServer()
“返回 http.Server 的新实例”。
这是否意味着 createServer()
也可以用作构造函数并在已创建的实例中创建另一个实例?奇怪的是,server.__proto__
指向函数 setTimeOut
,而不是 createServer
或 http
。
最佳答案
require()
是一个函数
,并在此处使用String
"http"
进行调用。
然后,Node.js 查找 http
module,对其进行解释,然后 require()
返回一个带有给定模块导出的 Object
。所以模块是require()
d,它可以导出
多个东西,而不仅仅是一个类
。
对象
在其他语言中被称为“字典”或“ 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/