ES6中class和super的疑惑

class Book{
            constructor(book1,book2) {
                this.book1 = book1;
                this.book2 = book2;
            }
            getName() {
                alert(this.book1+this.book2)
            }
        }
        class book extends Book{
            constructor() {
                super(book1,book2);
            }
            toSay() {
                super.getName();
            }
        }
        var cp = new book("javascript guide","javascript best pattern");

clipboard.png

看了阮一峰的ES6教程,对于class 和 super还是有点疑惑,首先创建一个Book类
然后创建一个子类book继承父类Book,super调用父类的构造函数,在toSay中调用父类的getName()方法,浏览器报错

以下是阮一峰有关class的例子,代码结构只是比我多在子类上定义一个color属性,如果我的子类不需要自己的属性,完全调用父类的属性和方法,不行吗?

class Point {
          constructor(x, y) {
            this.x = x;
            this.y = y;
          }

          toString() {
            return '(' + this.x + ', ' + this.y + ')';
          }
     }
         class ColorPoint extends Point {
              constructor(x, y, color) {
                super(x, y); // 调用父类的constructor(x, y)
                this.color = color;
              }

              toString() {
                return this.color + ' ' + super.toString(); // 调用父类的toString()
              }
        }

还有一个疑惑
阮老师说super()在子类中是必须定义的

clipboard.png
可是我的代码并没有super,浏览器执行了

clipboard.png

clipboard.png
请问这是为什么?

阅读 4.4k
3 个回答

可以,子的book没有传参数

        class book extends Book{
            constructor(book1, book2) {
                super(book1, book2);
            }
            toSay() {
                super.getName();
            }
        }

楼上正解。
如阮一峰老师所说:

  • 第一种情况,super作为函数调用时,代表父类的构造函数。

  • 第二种情况,super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。

新手上路,请多包涵

clipboard.png

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