Javascript: “ReferenceError: validGears is not defined”,尽管它显然是???(VSCode,节点 .js)

Javascript: "ReferenceError: validGears is not defined", even though it clearly is??? (VSCode, Node.js)

提问人:QuinnMcChief 提问时间:8/2/2023 更新时间:8/2/2023 访问量:22

问:

我在 vscode (Node.js) 上运行一个 js 文件,我的 Car 类中有一个明确定义的静态变量(数组),但调试器没有将其视为定义。

这是我目前对 Car 类的代码:

class Car {
    constructor(data = {}) {
        this.color = data.color || "blue";
        this.currentSpeed = data.currentSpeed || 0;
        this.topSpeed = data.topSpeed || 25;
        this.currentGear = data.currentGear || "Park";
        this.maxGas = data.maxGas || 10; // Litres
        this.currentGas = data.currentGas || this.maxGas;
    }

    static validGears = ["Park", "Neutral", "Drive"];
    changeGear(newGear) {
        switch (newGear) {
            case this.currentGear:
                console.log("Car is already in " + newGear);
                break;
            case validGears[newGear]:
                this.currentGear = newGear;
                break;
            default:
                console.log("Invalid gear.")
        }
    }
}

“validGears”(在第 11 行定义)是一个字符串数组,表示汽车可能处于的档位。很简单,对吧?好吧,看看接下来的几行(这是在同一个文件中):

let newCar = new Car({color: "Magenta", currentSpeed: 15});
newCar.changeGear("Drive");

我创建了一个实例,并调用了 changeGear 方法,但是我前面提到的错误声称 validGears 数组不存在(只要在 changeGear 方法中提到 validGears 变量,它就会抛出错误)。

我是 JavaScript 的新手,所以也许我遗漏了一些东西,但老实说,这似乎应该非常简单。我是小丑吗???

JavaScript 数组类 方法 static

评论

0赞 Titus 8/2/2023
要访问一个变量,你需要使用类似的东西staticCar.validGears

答:

1赞 HarrY 8/2/2023 #1

您可以使用类名 (ClassName.staticMemberName) 调用静态成员,例如;Car.validGears

评论

0赞 Titus 8/2/2023
你只能使用类名调用静态成员,这是不正确的,你也可以使用类似的东西this.constructor.staticMemberName
0赞 HarrY 8/2/2023
@Titus是的,没错。让我纠正一下我的句子。