super作为对象使用

来源:4-3 super

慕数据5191420

2022-04-19 15:08:02

        class Person {
            constructor(name) {
                this.name = name;
            }
            speak() {
                console.log('Person speak');
                console.log(this);
            }
        }

        class Child extends Person {
            constructor(name) {
                super(name)
                super.speak()
            }
        }

        let c1 = new Child('jack');//执行了speak函数,打印出Person speak
        class Person {
            constructor(name) {
                this.name = name;
            }
            speak() {
                console.log('Person speak');
                console.log(this);
            }
        }

        class Child extends Person {
            constructor(name) {
                super(name)
            }
            speak() {
                super.speak()
                console.log('Child speak');
            }
        }

        let c1 = new Child('jack');//没有执行了speak函数

问题描述:

代码1,super.speak写在构造器内部,代码2没有写在构造器内,为什么结果不同,哪种方式更好?

写回答

1回答

好帮手慕久久

2022-04-19

同学你好,这两种写法都不常见,简单了解即可。第二种写法中,super在子类的speak方法中,由于没有通过子类调用speak方法,所以没有执行speak。需要做如下调整:

https://img.mukewang.com/climg/625e632c0936ecbe07900593.jpg

此时两种写法执行结果就一样了。

第一种写法,super在constructor中,实例化子类时,constructor会自动执行,不需要手动调用,所以能执行speak:

https://img.mukewang.com/climg/625e639209efc9f507030244.jpg

祝学习愉快!

0

0 学习 · 17877 问题

查看课程