Verwendung von super: 1. Wenn super als Funktion verwendet wird, wird es verwendet, um den Konstruktor der übergeordneten Klasse darzustellen. Die Syntax lautet „constructor(){super();}“ 2. Wenn super verwendet wird als ein Objekt, auf das in gewöhnlichen Methoden verwiesen wird. Das Prototypobjekt der übergeordneten Klasse wird in statischen Methoden dazu verwendet, auf die übergeordnete Klasse zu verweisen.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, ECMAScript Version 6.0, Dell G3-Computer.
Der erste Fall: Wenn Super als Funktion verwendet wird, stellt es den Konstruktor der übergeordneten Klasse dar.
ES6 erfordert, dass der Konstruktor der Unterklasse die Superfunktion einmal ausführen muss
class A {} class B extends A { constructor() { super();//子类的构造函数,必须执行一次super函数,代表父类的构造函数 } }
Hinweis: Obwohl super den Konstruktor der übergeordneten Klasse darstellt, wird zu diesem Zeitpunkt die Instanz von B zurückgegeben, das heißt, dieser innere Super bezieht sich auf die Instanz von B, sodass super () A.prototype entspricht .constructor.call(this)
class A { constructor() { console.log(new.target.name); } } class B extends A { constructor() { super(); } } new A() // A new B() // B
Im obigen Code zeigt new.target auf die aktuell ausgeführte Funktion. Wenn super() ausgeführt wird, zeigt es auf den Konstruktor der Unterklasse B, nicht auf den Konstruktor der übergeordneten Klasse A. In Mit anderen Worten, die Funktion in super() zeigt auf B
Wenn super als Funktion verwendet wird, muss es im Konstruktor der Unterklasse erscheinen, andernfalls wird ein Fehler gemeldet
class A {} class B extends A { m() { super(); // 报错 } }
Zweiter Fall: Wenn super verwendet wird Als Objekt zeigt es in der gewöhnlichen Methode auf das Prototypobjekt der übergeordneten Klasse. In der statischen Methode zeigt es auf die übergeordnete Klasse
class A { p() { return 2; } } class B extends A { constructor() { super();//父类的构造函数 console.log(super.p()); // 2 } } let b = new B();
Wenn super im obigen Code als Funktion verwendet wird, stellt es das dar Konstruktormethode der übergeordneten Klasse. Wenn sie als Objekt verwendet wird, zeigt sie auf das Prototypobjekt der übergeordneten Klasse, nämlich A.prototype, sodass super.p( ) äquivalent zu A.prototype.p()
Sollte Beachten Sie hier auch, dass die Attribute oder Methoden der Instanz der übergeordneten Klasse nicht über super aufgerufen werden können, da super auf den Prototyp der übergeordneten Klasse verweist. Im obigen Code ist p Die Attribute der Instanz der übergeordneten Klasse A können nicht aufgerufen werden von super.p referenziert werden
Wenn das Attribut im Prototyp der übergeordneten Klasse definiert ist, können Sie mit super darauf zugreifen
class A { constructor() { this.p = 2; } } class B extends A { get m() { return super.p; } } let b = new B(); b.m // undefined
Im obigen Code ist das Attribut x im Prototyp des übergeordneten Klassenobjekts definiert, also Sie Kann man super gebrauchen.
Das obige ist der detaillierte Inhalt vonWas ist die Verwendung von super in es6?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!