2017-05-10 5 views
1

Ich möchte eine Funktion mit Standardparametern in verschachtelten Objekten haben, und ich möchte sie f() nennen oder nur einzelne Parameter angeben können. Eine Funktion mit verschachtelten Objekten mit Standardparametern:ES6 Standardparameter in verschachtelten Objekten

function f({ 
 
    a = 1, 
 
    callback = ({ 
 
    name, 
 
    param 
 
    } = { 
 
    name: "qwe", 
 
    param: 123 
 
    }) 
 
} = {}) { 
 
    console.log("a:", a); 
 
    console.log("callback:", callback); 
 
} 
 

 
// And I want to run it like this: 
 

 
f(); 
 
f({ callback: { params: "456" } });

Aber callback.name wird nicht definiert.

+0

Ihr Code funktioniert nicht. Bitte geben Sie ein funktionierendes Beispiel an. – nils

+1

Sollte nicht 'f (Rückruf: {params: '789'})' be 'f ({Rückruf: {params: '789'}})'? – evolutionxbox

+0

Haben Sie http://stackoverflow.com/questions/26578167/es6-object-destructing-default-parameters angeschaut? – evolutionxbox

Antwort

-1

Erwähnte Anruf wie dies das Problem löst, aber ist das der beste Weg?

function f({ 
 
    a = 1, 
 
    callback = ({ 
 
    name, 
 
    param 
 
    } = { 
 
    name: "qwe", 
 
    param: 123 
 
    }) 
 
} = {}) { 
 
    console.log("a:", a); 
 
    console.log("callback:", callback); 
 
} 
 

 
f(); 
 
f({ callback: { name, params: "456" } });

+1

'f (Rückruf: {Name, Parameter: '789'})' ist ein Syntaxfehler. –

+0

Ja, ich habe es behoben. – totalamd

+1

Badacadabras Antwort ist besser (weil es einfacher ist). –

1

Wenn Destrukturierung mit Standardparametern gemischt wird, das gebe ich den Code schwer zu lesen und schreiben (vor allem, wenn es Objekte verschachtelt sind ...).

Aber ich glaube, Sie versuchen, das zu tun:

function f({callback: {name = "cbFunction", params = "123"} = {}} = {}) { 
 
    console.log(name); 
 
    console.log(params); 
 
} 
 

 
f(); 
 
f({callback: {params: '789'}});

+0

Sie können Ihre Funktion nicht als 'f()' aufrufen und 'Callback' ist kein Objekt. – totalamd

+0

@totalamd: das ist jedoch leicht zu beheben: Fügen Sie einfach einen Standardwert (leeres Objekt) für den gesamten Parameter hinzu. –

+0

Wenn ich versuche, 'Callback' zu verwenden, ist 'Uncaught ReferenceError: Callback nicht definiert'. Es ist wichtig, weil ich mehrere verschachtelte Objekte mit gleichen Feldern verwenden möchte. – totalamd

Verwandte Themen