我有以下代码。如何使得当我调用rabbit.halfRun();
时,它运行Animal.run()
中的代码而不是Rabbit.run()
中的代码?
class Animal {
constructor(name) {
this.speed = 0;
this.name = name;
}
run(speed) {
this.speed += speed;
console.log(`${this.name} runs with speed ${this.speed}.`);
}
halfRun(){
var newSpeed = this.speed / 2;
// expect to be run() from Animal class, not Rabbit class
this.run(newSpeed)
}
}
class Rabbit extends Animal {
run(speed) {
var speed = speed * 2;
super.run(speed);
}
}
let rabbit = new Rabbit("White Rabbit");
rabbit.run(5); // expect and get 10
rabbit.halfRun(); // expect 5 but I get 20 because it is running the run() from Rabbit
runImpl
的“私有”方法。 - Daniel A. Whitesuper.run(speed);
的存在,父类和子类的run
方法都会被执行。您可以通过在Rabbit的run
方法中添加console.log
语句来确认这一点。 - leo.fcxrabbit.halfRun()
,你应该期望得到15
,而不是5
。以下是序列(假设您获得了所需的行为):将this.speed
设为10
,然后将newSpeed
设为5
,最后将this.speed
设为10 + 5
,得到15
。 - Gerardo FurtadoRabbit.run()
并且它调用了Animal.run()
。 - Seldon Stone