javascript – Verwirrung über Klasse und Super in ES6
黄舟
黄舟 2017-05-19 10:31:04
0
2
757
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");

Nachdem ich Ruan Yifengs ES6-Tutorial gesehen habe, bin ich immer noch ein wenig verwirrt über Klasse und Super. Erstellen Sie zuerst eine Buchklasse, um die übergeordnete Klasse Book zu erben, ruft Super den Konstruktor der übergeordneten Klasse auf und ruft den Konstruktor der übergeordneten Klasse auf getName in der toSay()-Methode meldet der Browser einen Fehler

Das Folgende ist Ruan Yifengs Beispiel zur Klasse. Die Codestruktur definiert nur ein Farbattribut für die Unterklasse. Wenn meine Unterklasse keine eigenen Attribute benötigt, kann ich dann die Attribute und Methoden der übergeordneten Klasse vollständig aufrufen?

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()
              }
        }

Es gibt noch einen weiteren Zweifel

Lehrer Ruan sagte, dass super() in Unterklassen definiert werden muss

Aber mein Code hat kein Super, der Browser führt ihn aus

Entschuldigung, warum ist das so?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

Antworte allen(2)
世界只因有你

可以,子的book没有传参数

        class book extends Book{
            constructor(book1, book2) {
                super(book1, book2);
            }
            toSay() {
                super.getName();
            }
        }
左手右手慢动作

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

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage