Lesen Dr. Axel Rauschmayer's blog on ES6 classes, ich verstehe, dass eine abgeleitete Klasse die folgende Standard-Konstruktor hat, wenn keineWann muss ich `super` von einem Konstruktor aufrufen?
constructor(...args) {
super(...args);
}
auch vorgesehen ist, verstehe ich, dass, wenn ich this
in einem Konstruktor verwenden möchten this
werde ich brauchen, um erste super
zu nennen, sonst noch nicht initialisiert (ReferenceError werfen).
constructor(width, height) {
this.width = width; // ReferenceError
super(width, height);
this.height = height; // no error thrown
...
}
Ist die folgende Annahme dann richtig? (Und wenn nicht, könnten Sie bitte die Bedingungen erläutern, unter denen ich ausdrücklich super
nennen sollte)
für abgeleitete Klassen, ich brauche nur ausdrücklich super
rufen, wenn ...
- Ich muss für den Zugriff auf
this
aus im Konstruktor - der Oberklassenkonstruktors erfordert unterschiedliche Argumente dann die abgeleitete Klasse Konstruktor
anderen Zeiten sind da, wenn ich einen Anruf enthalten sollte zum Superklassenkonstruktor?
Nein, gibt es nicht. Welche Art von "Beweis" willst du für diese Aussage? –
Wenn Sie eine Klasse wie 'Klasse ABC erweitern DEF {...' machen, dann müssen Sie 'Super (...args); ', weil Sie gerade mit' extends DEF' angegeben haben, dass Sie daraus ableiten wollen. Wenn Sie nicht von irgendeiner Klasse abgeleitet sind, dann setzen Sie nicht einfach 'super' in den ABC-Konstruktor. So einfach ist das. – Azamantes
@Azamantes: Es ist nicht notwendig, 'super' aufzurufen, wenn die Elternklasse dieselben Argumente wie die Kindklasse annimmt. –