2016-07-18 20 views
12

W ES6, czy istnieje sposób wywołania konstruktora macierzystego przechodzącego przez argumenty variadic, a la foo.apply(this, arguments)? Szukałem odpowiedzi, a jedyne przypadki, które widzę, to wywoływanie super() (bez argumentów) lub wywoływanie super(x, y) (z określonymi argumentami). super.apply(this, arguments) nie działa.ES6 class super() z argumentami variadic

+0

Operator spreadu ma lepsze zastosowanie. – Oriol

+0

'super.constructor.apply (to, argumenty)' działałoby, gdyby 'ten' był już zainicjowany – Bergi

Odpowiedz

18

Wzór znaleźć wygodne i naśladowania jest

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

W przypadku masz i używać nazwanych argumentów można to zrobić w zamian:

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

Referencje:

+1

Jeśli używasz tego w przeglądarce, po prostu bądź świadomy rozległego wsparcia operatora, ponieważ wsparcie jest całkiem nowe iz jakiegoś powodu wsparcie dla operator rozrzutu pojawił się później niż inne funkcje ES6, takie jak "klasa". Na przykład nie sądzę, że jest jakaś obsługa IE. Można oczywiście użyć także transpilatora. – jfriend00

+2

@ jfriend00 IE nie obsługuje prawie nic z ES2015, więc, kogo to obchodzi :-) – zerkms

+3

Łatwo jest znaleźć wersje Chrome, które nie są najnowszą i obsługują 'class', ale nie obsługują operatora rozprzestrzeniania. Po prostu doradzam OP, aby upewnić się, że mają obsługę przeglądarki, której potrzebują. Nie bądź tak defensywny. To dobra odpowiedź, jeśli środowisko to obsługuje. – jfriend00

Powiązane problemy