2016-07-18 18 views
12

Gibt es in ES6 eine Möglichkeit, einen übergeordneten Konstruktor aufzurufen, der Variadic-Argumente durchgibt, a la foo.apply(this, arguments)? Ich habe nach einer Antwort gesucht, und die einzigen Instanzen, die ich sehe, sind entweder super() (keine Argumente) oder Aufruf super(x, y) (mit bestimmten Argumenten). super.apply(this, arguments) scheint nicht zu funktionieren.ES6-Klasse super() mit Variadic-Argumenten

+0

Der Spread-Operator ist eine bessere Anwendung. – Oriol

+0

'super.constructor.apply (this, arguments)' würde funktionieren, wenn 'this' bereits initialisiert wurde – Bergi

Antwort

18

Das Muster, das ich bequem und folgen finden ist

constructor(...args) { 
    super(...args); 
} 

Falls Sie haben und die Verwendung benannten Argumente könnten Sie diese stattdessen tun:

constructor(a, b, c) { 
    super(...arguments); 
} 

Referenzen:

+1

Wenn Sie dies in einem Browser verwenden, beachten Sie bitte die Unterstützung von Spread-Operatoren, da die Unterstützung ziemlich neu ist und aus irgendeinem Grund Unterstützung für Der Spread-Operator kam später als andere ES6-Features wie "Klasse". Zum Beispiel glaube ich nicht, dass es IE-Unterstützung gibt. Sie könnten natürlich auch einen Transpiler verwenden. – jfriend00

+2

@ jfriend00 IE unterstützt fast nichts von ES2015, also wen interessiert's :-) – zerkms

+3

Es ist einfach zu finden, dass Chrome-Versionen nicht die neuesten sind und 'class' unterstützen, aber den Spread-Operator nicht unterstützen. Ich rate nur dem OP, um sicherzustellen, dass sie den Browser-Support haben, den sie brauchen. Werde nicht so defensiv. Dies ist eine nette Antwort, wenn Ihre Umgebung dies unterstützt. – jfriend00