Klänge der Zukunft
In Zukunft werden Sie ein Objekt auf ein anderes "verteilen" können (derzeit ab 2019 NICHT von Edge unterstützt !) - Demonstration, wie man das für schöne Standardoptionen unabhängig von der Reihenfolge verwenden kann:
function test(options) {
var options = {
// defaults
url: 'defaultURL',
some: 'somethingDefault',
// override with input options
...options
};
var body = document.getElementsByTagName('body')[0];
body.innerHTML += '<br>' + options.url + ' : ' + options.some;
}
test();
test({});
test({url:'myURL'});
test({some:'somethingOfMine'});
test({url:'overrideURL', some:'andSomething'});
test({url:'overrideURL', some:'andSomething', extra:'noProblem'});
MDN-Referenz: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
...währenddessen was Edge DOES unterstützt Object.assign() (IE nicht, aber ich hoffe wirklich, dass wir IE hinter uns lassen können :) )
In ähnlicher Weise könnten Sie Folgendes tun
function test(options) {
var options = Object.assign({
// defaults
url: 'defaultURL',
some: 'somethingDefault',
}, options); // override with input options
var body = document.getElementsByTagName('body')[0];
body.innerHTML += '<br>' + options.url + ' : ' + options.some;
}
test();
test({});
test({url:'myURL'});
test({some:'somethingOfMine'});
test({url:'overrideURL', some:'andSomething'});
test({url:'overrideURL', some:'andSomething', extra:'noProblem'});
EDIT: Aufgrund von Kommentaren zu const
Optionen - das Problem bei der Verwendung konstanter Optionen im Rest der Funktion ist eigentlich pas dass Sie das nicht tun können, ist nur, dass Sie die konstante Variable nicht in ihrer eigenen Deklaration verwenden können - Sie müssten die Benennung der Eingabe anpassen, z. B.
function test(input_options){
const options = {
// defaults
someKey: 'someDefaultValue',
anotherKey: 'anotherDefaultValue',
// merge-in input options
...input_options
};
// from now on use options with no problem
}