Я играю с классами ES6 и столкнулся с поведением кода ниже.
Ошибка, которую я получаю, это bob.personName is not a function
.
И класс, и его расширение определены constructor
, но я все равно не могу заставить его работать. Я добавил комментарии под строками, которые, как мне кажется, могут быть проблемой. Спасибо за помощь!
class Person {
constructor(canSpeak) {
this.canSpeak = true;
}
}
class Hello extends Person {
constructor(name) {
this.name = name;
}
personName() { //am I missing a parameter?
if (this.canSpeak) {
return `Name is: ${this.name}, can speak? ${this.canSpeak}`;
}
};
};
const bob = new Person('Bob'); //should I call Hello extension instead?
console.info(bob.personName());
Подумайте об этом так. Есть машина (Персона) с опциональным люком (Здравствуйте), но вы не выбрали этот вариант, вы купили базовую модель (Персона) и теперь пытаетесь открыть люк
Да, это провалилось для меня. Я не могу вызвать функцию, являющуюся частью конкретной конфигурации, на базовом уровне. Мне нужно вызвать его оттуда, где он находится. Спасибо!
Поскольку метод существует на Hello.prototype
, а не на Person.prototype
, вам нужен экземпляр Hello
.
Вы также не можете ссылаться на this
до вызова super
внутри конструктора подкласса, поэтому сделайте это перед назначением this.name
:
class Person {
constructor(canSpeak) {
this.canSpeak = true;
}
}
class Hello extends Person {
constructor(name) {
super();
this.name = name;
}
personName() { //am I missing a parameter?
if (this.canSpeak) {
return `Name is: ${this.name}, can speak? ${this.canSpeak}`;
}
};
};
const bob = new Hello('Bob'); //should I call Hello extension instead?
console.info(bob.personName());
Чем ты! Я думал, что super
был тем, чего я пропустил.
personName
— это только методHello
экземпляров, а неPerson
.