在ES6中使用课程时,超级'关键字只能在类方法中直接使用。这是完全合理的,但有时很尴尬。
这是我提出的解决方法,但是有更好的方法吗?
class foo {
constructor () {
}
bar (x) {
console.log('bar x:', x);
}
}
class morefoo extends foo {
constructor () {
super();
}
bar (x) {
let super_bar = super.bar.bind(this);
setTimeout(function () {
//super.bar(x*2); // => 'super' keyword unexpected here
super_bar(x*2);
}, 0);
}
}
let f = new morefoo;
f.bar(33);

答案 0 :(得分:2)
如果您想在回调中引用super
,请使用arrow function
class foo {
constructor () {
}
bar (x) {
console.log('bar x:', x);
}
}
class morefoo extends foo {
constructor () {
super();
}
bar (x) {
setTimeout(() => super.bar(x*2), 0);
}
}
let f = new morefoo;
f.bar(33);

箭头功能区别对待某些关键字/变量(this
,arguments
,super
)。