Есть несколько причин, по которым код из исходного поста не делает то, что ожидает от ОП.
class Character {
constructor(name, weapon) {
this.name = name;
this.weapon = weapon;
}
attack(){
this.name + ' attacks with ' + this.weapon; // (1)
}
}
class Elf extends Character {
constructor(name, weapon, type) {
super(name, weapon);
this.type = type;
}
magicAttack() {
this.name + ' chants '; // (2)
setTimeout(function(){this.type; }, 3000); // (3)
}
}
const aeri = new Elf("Aeri", "bow", "air")
const bob = new Character("Bob", "yawn")
(1) В методе attack()
отсутствует return
оператор
(2) Оператор this.name + ' chants ';
ничего не делает, поскольку результат объединения не присваивается переменной или не передается методу, поэтому он просто отбрасывается.
(3) Анонимная функция, переданная setTimeout
, ссылается this.type
, но учитывая , как this
работает в JavaScript , type
не определена в этом контексте (поскольку this
на самом деле является анонимной функциейсам).
Чтобы увидеть результаты вызова метода, необходимо применить следующие изменения к исходному образцу кода:
class Character {
constructor(name, weapon) {
this.name = name;
this.weapon = weapon;
}
attack(){
return this.name + ' attacks with ' + this.weapon; // (1)
}
}
class Elf extends Character {
constructor(name, weapon, type) {
super(name, weapon);
this.type = type;
}
magicAttack() {
const chant = this.name + ' chants '; // (2)
setTimeout(function(){ console.log(chant); }, 3000); // (3)
}
}
const aeri = new Elf("Aeri", "bow", "air")
const bob = new Character("Bob", "yawn")
aeri.magickAttack();
Надеюсь, это поможет!
Jan