¿Por qué el miembro de la clase no está definido después de que definitivamente se le asigne un valor en el constructor?
main.js :
import { createServer } from "http"; class DefaultHandler { handle(i, o) { console.log("entered handler"); o.end(() => { console.log("ended"); }); } } class Gateway { handler; constructor() { this.handler = new DefaultHandler(); if (this.handler !== undefined) console.log("handler instantiated"); } handleTraffic(i, o) { console.log("gateway got traffic"); this.handler.handle(i, o); } } const server = createServer(new Gateway().handleTraffic); server.listen({ port: 28751 }, () => { console.log(`listening on ${Object.values(server.address()).join(":")}`); }); luego, mientras también se localhost:28751 , STDOUT es:
$ node --version && node main.js v16.14.2 handler instantiated listening on :::IPv6:28751 gateway got traffic file:///main.js:19 this.handler.handle(i, o); ^ TypeError: Cannot read properties of undefined (reading 'handle') at Server.handleTraffic (file:///main.js:19:22) at Server.emit (node:events:526:28) at parserOnIncoming (node:_http_server:951:12) at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)