2016-08-15 4 views
-1

Ich versuche, einen Konstruktor mit folgendem Verhalten für ein Argument Optionen zu definieren:ES6 Standardargument auf leeres Objekt?

class Test { 
 
    constructor({ 
 
    someOption = 'foo', 
 
    otherOption = 'bar', 
 
    aSeedOfSomeSort = Math.random(), 
 
    // ... 
 
    }) { 
 
    console.log(
 
     someOption, otherOption, aSeedOfSomeSort 
 
    ); 
 
    } 
 
} 
 

 
new Test({someOption: 'lol'}); 
 
new Test({otherOption: 'derp'}); 
 
new Test({aSeedOfSomeSort: 0.5}); 
 
new Test({}); 
 
new Test(); // here's the problem

Dies funktioniert gut, aber ich möchte der Konstrukteur zu arbeiten, so dass alle Standard zu verwenden Parameter, ich muss kein leeres Objekt übergeben. Es ist mir egal, ob das Objekt selbst in den Argumenten benannt wird oder nicht, aber im Kontext des Konstruktors möchte ich einen sauberen Weg, um direkt auf alle Optionen ohne Namespace zuzugreifen oder with zu verwenden.

Ist das möglich?

+0

Danke Oriol! Hab das nicht gesehen –

Antwort

0

im Konstruktor verwenden, um dies:

constructor({ 
    someOption = 'foo', 
    otherOption = 'bar', 
    aSeedOfSomeSort = Math.random(), 
    // ... 
} = {}) 

Durch = {} am Ende Zugabe wird es der Standardwert des Eingangsparameters, falls nicht definiert.

Example