【发布时间】:2021-08-02 16:54:57
【问题描述】:
为了更好地理解它们而玩弄类,我发现自己陷入了原本应该非常基本的东西。
下面的代码基本上只是一个扩展另一个类的类,我尝试了它们。
我的问题与 Animal 方法 danger(dangerLvl) 中的逻辑有关。
下面的写法按预期工作:
class Animal {
constructor(name, age, dangerLvl) {
this.name = name;
this.age = age;
this.dangerLvl = dangerLvl;
}
danger(dangerLvl) {
if (dangerLvl != 0) {
return `${this.name} is dangerous!`
} else {
return `${this.name} is docile :)`
}
}
}
class Feline extends Animal {
hiss() {
return `${this.name} hisses threateningly!`
}
}
const sissi = new Feline("Sissi", 5, 1);
sissi.danger();
// returns "Sissi is dangerous!"
我不明白的是方法danger(dangerLvl) 在这样写时的行为:
danger(dangerLvl) {
if (dangerLvl >= 1) {
return `${this.name} is dangerous!`
} else {
return `${this.name} is docile :)`
}
}
const sissi = new Feline("Sissi", 5, 1);
sissi.danger();
// returns "Sissi is docile :)" <===== which is NOT expected. This is what I don't get.
不完全确定我是如何设法达到某种程度的,即我在某种程度上获得了异步函数、回调和原型,但无法弄清楚像这样基本的东西。至少可以说相当令人沮丧。
在我看来,我什至应该可以这样写,但显然我错过了一些东西......
danger(dangerLvl) {
if (dangerLvl >= 1) {
return `${this.name} is dangerous!`
}
return `${this.name} is docile :)`
}
谢谢。
【问题讨论】:
-
在比较发生之前尝试打印 dangerLvl。
-
dangerLvl 未定义。动物永远是危险的
-
你没有通过参数......并且
undefined >= 1评估为假。该函数实际上根本不应该接受参数,并且您应该使用具有相同名称的成员。 -
// 返回“茜茜公主很危险!”,// 返回“茜茜公主很温顺 :)” 您自己的打印语句不匹配。由于从参数中使用了 dangerLvl,因此它始终是未定义的。尝试改用
this.dangerLvl -
谢谢大家,这些基本错误让我失望地摇头*。感谢手把手的人。
标签: javascript function class oop if-statement