ts中继承后的this和super的问题

image.png
首先我drawImgListArea是对父类的重写,在这块我想调用父类的drawImgListContent方法,但是我看了看这个时候我使用this和super都能成功调用,因为子类继承了父类所以this指向子类也能找到drawImgListContent,那这个super有什么用呢

阅读 4.4k
1 个回答

又看了一遍问题。是这样的,如果子类没有重载父类方法的情况下,super.this. 没区别。但是如果子类有重载,比如下面的示例,那就不一样了。


const println = console.log;

class Person {
    test() {
        println("[Person]::test()");
    }
}

class Student extends Person {
    override test() {
        println("[Student]::test()");
    }

    process() {
        super.test();
        this.test();
    }
}

new Student().process();

你猜会输出什么呢?

会输出:

[Person]::test()
[Student]::test()

特别强调一点:一般情况下,仅在重载函数中通过 super. 调用父被被重载的同名函数。应该尽量避免调用父类的非同名函数,如上例 process 中调用 super.test() 就应该尽量避免。这里这样调用是非常特殊的情况 —— 需要比较两个输出。真实场景的设计,子类重载的函数和父类同名函数应该有垂直关联,而水平关联应该避免越到父级。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进