【发布时间】:2016-04-03 16:37:50
【问题描述】:
所以当我看到一些令人惊讶的东西时,我正在乱搞 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您正在分配给 instance,因此始终需要使用this访问它 -
为什么不能访问 super 属性而是赋值?类 { 名称 = '杰克';说话() { console.log(this.name); } } 类 b 扩展一个 { count() { super.name = 'Lucy'; super.speak(); } } 新 b().count(); // 露西
标签: javascript class inheritance ecmascript-6 super