使用ECMAScript 6和类时,是否可以在异步调用完成后从扩展类方法调用超类方法?
以下是代码中问题的摘要:
class Foo {
constructor () {
}
myMethod (data) {
console.log('Data was: ', data);
}
}
class Bar extends Foo {
constructor () {
super();
}
myMethod () {
database.getDataForId('wth4308g40giemwfo', function (err, data) {
super.myMethod(data);
});
}
}
使用上面的类Foo.myMethod()会导致错误,因为super不再引用Foo的超类,并且在回调中未定义。
我试图在回调之前保留对super的引用,并在回调完成后在回调中使用该引用,但这似乎不起作用,例如:
myMethod () {
var mySuper = super;
database.getDataForId('wth4308g40giemwfo', function (err, data) {
mySuper.myMethod(data);
});
}
有可能吗?
答案 0 :(得分:5)
箭头函数将保留所有词汇引用,而不仅仅是this
,因此您也可以使用一个来访问super
:
myMethod () {
database.getDataForId('wth4308g40giemwfo', (err, data) => {
super.myMethod(data);
});
}
答案 1 :(得分:2)
您不能保留对super
的引用,但您可以使用以下功能:
myMethod () {
var myMethod = super.myMethod;
var self = this;
database.getDataForId('wth4308g40giemwfo', function (err, data) {
myMethod.call(self, data);
});
}