Ich übergebe ständig Konfigurationswerte an Funktionen, die wie folgt auf sie zugreifen:
var arg1 = 'test1';
if(isUndefined(config.args.arg1)){
arg1 = config.args.arg1;
}
var arg2 = 'param2';
if(isUndefined(config.args.arg2)){
arg2 = config.args.arg2;
}
var arg3 = '123';
if(isUndefined(config.args.arg3)){
arg3 = config.args.arg3;
}
wo ich sie später so benutze:
var url = '<some-url>?id='+arg1+'&='+arg2 +'=' + arg3;
Bietet jQuery / ExtJS oder ein anderes Framework eine Lösung, um auf einfache Weise auf solche Variablen zuzugreifen und Variablen einen Standardwert zu geben?
Etwas wie:
getValueOfObject(config,'args.arg3','<default>');
Oder gibt es dafür vielleicht eine Standardlösung.
HINWEIS:
Ich habe auch über das allgemeine Muster nachgedacht, bei dem Sie Standardeinstellungen haben
var defaults = {
args: {
args1: ....
}
...
}
und eine Objektzusammenführung durchführen.
Und dann das Objekt in einen param String codieren. Aber wie Sie das Objekt sehen können Werte manchmal auch Parameternamen enthalten.
quelle
config.args.arg1
nicht definiert ist, aber werden nicht dieses fehlschlagen , wennconfig
oderconfig.args
ist selbst nicht definiert?config.args.arg1
wird werfen, wennconfig.args === undefined
couldBeUndefined = 0
oder irgendein anderer falscher Wert, dannfoo = "some default"
anstatt den gewünschten zu bekommenfoo = 0
typeof x.y != 'undefined' ? x.y : "";
Sieht so aus, als hätte lodash endlich die Funktion _.get () dafür!
quelle
Mit ES2018 können Sie jetzt schreiben
options = { ...defaults, ...options }
:Spread-Syntax - JavaScript | MDN
quelle
Versuchen
var options = extend(defaults, userOptions);
Auf diese Weise erhalten Sie alle userOptions und greifen auf die Standardeinstellungen zurück, wenn sie keine Optionen übergeben.
Beachten
extend
Sie, dass Sie eine beliebige Implementierung verwenden können .quelle
extend
ändert normalerweise und gibt sein erstes Argument zurück. Dies bedeutet, dass Sie normalerweise möchtenextend({}, defaults, userOptions)
, damit die Standardeinstellungen nicht geändert werden._.defaults
für genau diesen Zweck.