如何在重写方法中访问“this”?

时间:2017-11-14 02:54:22

标签: typescript

我有一个暴露方法的抽象类:

public abstract class Foo {
    public update(){
        //do some stuff
    }
}

此类继承自:

public class Doo extends Foo {
    public update(){
        super.update();
        const x = this.getValue(); //problem line
    }
}

现在,由于update()被公开,它正在不同的上下文中执行,因此“问题行”上的this引用了调用对象,我通常会解决的问题是在抽象父级中将update()声明为箭头方法:

public class Foo {
    public update = () => {
       //call this all i want
    }
}

但是,如果我这样做,我就不能再从子类中调用super()。有没有办法调用super.update() 来维持对this的控制权?

1 个答案:

答案 0 :(得分:1)

不幸的是,你能做的最好的事情是创建两个方法 - 一个用于覆盖,一个用于公共。将实现放在覆盖方法中,但使用调用this.otherMethod()的箭头函数公开单独的方法。这样你就可以为公共方法保留this并为实现保留super

这不是一个TypeScript问题,而是一个JavaScript问题。