Javascript 为什么我的var在使用类时未定义?

Javascript 为什么我的var在使用类时未定义?,javascript,node.js,express,Javascript,Node.js,Express,我是JavaScript新手,为什么Index.js第7行的this.main没有定义 Main.js class Main { constructor(hostname, port) { this.hostname = hostname; this.port = port; } init() { const express = require("express"); const app = expres

我是JavaScript新手,为什么Index.js第7行的
this.main
没有定义

Main.js

class Main {

    constructor(hostname, port) {
        this.hostname = hostname;
        this.port = port;
    }

    init() {
        const express = require("express");
        const app = express();

        console.log("Starting server on port: " + this.port);
        app.listen(this.port);

        const index = require("./index/Index");
        const indexI = new index(this);

        app.get("/", indexI.handle);
    }
}

module.exports = Main;
Index.js

class Index {
    constructor(main) {
        this.main = main;
    }

    handle(req, res) {
        return res.send("MAIN: " + this.main);
    }
}

module.exports = Index;
我需要Index.js来访问Main.js类实例

编辑:

我发现如果我改变:
app.get(“/”,indexI.handle)


它是有效的,为什么会这样?

当您将
indexI.handle
传递给
app.get
时,您只是传递了函数,函数范围内的
不是
索引的实例

试试这个

app.get("/", indexI.handle.bind(indexI));

当您将
indexI.handle
传递给
app.get
时,您只是传递函数,函数范围内的
不是
索引的实例

试试这个

app.get("/", indexI.handle.bind(indexI));

如果您将代码放入代码段,人们可以尝试运行它并看到错误。您可以编辑您的问题并使用
按钮添加代码段。为了获得最佳实践,请避免在方法中写入
require
,因为在应用程序启动时没有准备好依赖项,因此可能会出现意外的运行时错误或其他问题。如果将代码放入代码段,人们可以尝试运行它并看到错误。您可以编辑您的问题并使用
按钮添加代码段。为了获得最佳实践,请避免在方法中写入
require
,您可能会遇到意外的运行时错误或其他问题,因为您在应用程序启动时没有准备好依赖项。这是有效的。我还用找到的另一个补丁编辑了我的问题。您的答案是否比我的编辑更好?两者都以相同的方式解决了问题,但我更喜欢
.bind()
而不是包装函数,因为它可能更具动态性。您的答案缺少一个
:p@JaromandaX,P.S.untestedIt有效。我还用找到的另一个补丁编辑了我的问题。您的答案是否比我的编辑更好?两者都以相同的方式解决了问题,但我更喜欢
.bind()
而不是包装函数,因为它可能更具动态性。您的答案缺少一个
:p@JaromandaX,P.S.未经测试