Так что я бездельничал с классами ES6, когда я увидел что-то удивительное:Доступ ES6 супер свойства
class Animal {
constructor(name) {
this.name = name;
}
speak(sound) {
console.log(sound);
}
}
class Dog extends Animal {
constructor(name, age) {
super(name);
this.age = age;
}
speak() {
super.speak("Woof! I'm " + super.name + " and am " + this.age);
}
}
Затем я создал мою собаку:
var mydog = new Dog("mydog",3);
mydog.speak();
Теперь это печатает
Woof! I'm undefined and am 3
Так что мой вопрос в том, почему super.name
не определено? В этом случае я ожидаю, что это будет mydog
.
'super' может быть использован только для доступа к свойствам на прототипе. Используя 'this.name' вы назначаете * экземпляр *, и поэтому всегда нужно обращаться к нему с помощью' this' – CodingIntrigue