提问人:QuinnMcChief 提问时间:8/2/2023 更新时间:8/2/2023 访问量:22
Javascript: “ReferenceError: validGears is not defined”,尽管它显然是???(VSCode,节点 .js)
Javascript: "ReferenceError: validGears is not defined", even though it clearly is??? (VSCode, Node.js)
问:
我在 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 的新手,所以也许我遗漏了一些东西,但老实说,这似乎应该非常简单。我是小丑吗???
答:
1赞
HarrY
8/2/2023
#1
您可以使用类名 (ClassName.staticMemberName) 调用静态成员,例如;Car.validGears
评论
0赞
Titus
8/2/2023
你只能使用类名调用静态成员,这是不正确的,你也可以使用类似的东西this.constructor.staticMemberName
0赞
HarrY
8/2/2023
@Titus是的,没错。让我纠正一下我的句子。
评论
static
Car.validGears