Что именно происходит, когда требуется класс и вызывается метод из другого метода? - PullRequest
0 голосов
/ 03 марта 2019

Когда метод, такой как 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.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Что именно происходит, когда требуется класс?

Во-первых, http - это просто модуль, а не класс. Так что, если вы спрашиваете Что происходит, когда вызывается require(), он возвращает экспортированный справочный модуль, такой как http.

Что происходит, когда вызывается метод в другом методе?

Зависит от поведения метода.В вашем случае http.createServer() возвращает экземпляр http.Server. Это не значит, что http.createServer() является конструктором http.Server, но возвращает его экземпляр.

const http = require('http');
console.log(http.createServer() instanceof http.Server)
// true
0 голосов
/ 03 марта 2019

require() является function и вызывается с String "http" здесь.Затем Node.js ищет модуль http , интерпретирует его, а require() возвращает Object с экспортом данного модуля.Таким образом, module - это require() d, который может export несколько вещей, а не просто class.

. Object в JavaScript - это то, что в других языках называется 'словарь' или 'карта' , связывающая значения с ключами типа String.(Map был позже добавлен в JavaScript и может иметь ключи любого типа.)

createServer() - это всего лишь function в этом Object, под ключом "createServer".При вызове он возвращает другой Object, экземпляр из class http.Server.Это можно назвать заводской функцией .Смотрите его реализацию здесь .

listen(), в свою очередь, аналогично function в этом Object, другими словами, метод из class http.Server.

Ни один из них не является конструкторами , которые вызываются с ключевым словом new, как в: new http.Server().

server.constructor === http.Server
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...