Heim > Artikel > Web-Frontend > Was bedeutet das es6-Schlüsselwort super?
Super bedeutet in es6 „super“. Dieses Schlüsselwort kann als Funktion oder Objekt verwendet werden: 1. Bei Verwendung als Funktion stellt es den Konstruktor der übergeordneten Klasse dar und die Syntax lautet „constructor() {super“. ();}"; 2. Wenn es als Objekt verwendet wird, stellt es das Prototypobjekt der übergeordneten Klasse dar.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, ECMAScript Version 6.0, Dell G3-Computer.
ES6 implementiert die Klassenvererbung neu, und im Vererbungsprozess spielt das Super-Schlüsselwort eine entscheidende Rolle. Man kann sagen, dass man das Super-Schlüsselwort nicht beherrschen kann die Klasse. Vererbung, heute werden wir gemeinsam das Schlüsselwort super besprechen
Lass uns zunächst ein Konzept ausarbeiten: Das Schlüsselwort super kann sowohl als Funktion als auch als Objekt verwendet werden
Eine Situation: Wenn super als Funktion verwendet wird, stellt es den Konstruktor der übergeordneten Klasse dar. ES6 erfordert, dass der Konstruktor der Unterklasse die Funktion super
einmal ausführen muss. Hinweis: Obwohl super den Konstruktor darstellt des übergeordneten Klassenkonstruktors, aber was zu diesem Zeitpunkt zurückgegeben wird, ist eine Instanz von B, das heißt, dieser innere Super bezieht sich auf eine Instanz von B, sodass super()
äquivalent zu A ist .prototype.constructor.call(this)
super
函数
class A {}class B extends A { constructor() { super();//子类的构造函数,必须执行一次super函数,代表父类的构造函数 }}
注意:虽然super代表父类的构造函数,但此时返回的时B的实例,即super内部的this指的是B的实例,因此super()
相当于 A.prototype.constructor.call(this)
上述代码中,new.target
指向当前正在执行的函数,super()执行的时候,它指向的是子类B的构造函数,而不是父类A的构造函数,也就是说,super()内部的this指向B
第二种情况:super作为对象时,在普通方法中,指向父类的原型对象,在静态方法中,指向父类
class A { p() { return 2; }}class B extends A { constructor() { super();//父类的构造函数 console.log(super.p()); // 2 }}let b = new B();
上面代码中,super
作为函数时,代表父类的构造方法,作为对象时,指向父类的原型对象,即A.prototype
,所以super.p()
相当于A.prototype.p()
这里还需要注意,由于 super指向父类的原型,所以在父类实例上的属性或者方法,并不能通过super调用
上面代码中,p是父类A实例的属性,super.p
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 der Konstruktor der übergeordneten Klasse A. Funktion, das heißt, dies in
super
bei Verwendung als Funktion die Konstruktormethode der übergeordneten Klasse dar. Wenn es als Objekt verwendet wird, zeigt es auf das Prototypobjekt der übergeordneten Klasse, also A.prototype
🎜, sodass super.p()
äquivalent zu A.prototype.p()
🎜🎜Hier müssen Sie auch aufpassen, da 🎜super auf den Prototyp der übergeordneten Klasse verweist, sodass die Attribute oder Methoden der Instanz der übergeordneten Klasse nicht aufgerufen werden können durch super
🎜🎜🎜🎜🎜Im obigen Code ist p ein Attribut der Instanz der übergeordneten Klasse A und super.p
kann nicht darauf verweisen🎜 🎜【Verwandte Empfehlungen: 🎜Javascript-Video-Tutorial🎜, 🎜 Web-Frontend🎜】🎜Das obige ist der detaillierte Inhalt vonWas bedeutet das es6-Schlüsselwort super?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!