2017-09-03 1 views
1

J'ai écrit une fonction qui accepte un objet comme paramètre. Cet objet contient divers paramètres supplémentaires. Cela fonctionne comme beaucoup de fonctions jQuery.Assurer que ma fonction à l'intérieur d'une bibliothèque est appelée avec les paramètres de plage

Quelle est la meilleure façon de s'assurer que l'objet contient les paramètres minimaux requis et comment puis-je attribuer des valeurs par défaut aux paramètres qui ne sont pas requis?

Voici ce que je fais maintenant.

/* 
 
\t var options = { 
 
\t \t ListTitle: "", 
 
\t \t WebPartID: "", 
 
\t \t DisplayField: "Title", 
 
\t \t EnforceUnique: true, 
 
\t \t AllowEmpty: true, 
 
\t \t RequireSelection: true, 
 
\t \t NoSelectionMessage: "Please Select a Value", 
 
\t \t ConnectedWebPartID: "" 
 
\t } 
 
\t */ 
 

 
\t //Set Defaults. 
 
\t dropdownFilterOptions.DisplayField = (typeof dropdownFilterOptions.DisplayField === "undefined" ? "Title" : dropdownFilterOptions.DisplayField); 
 
\t dropdownFilterOptions.EnforceUnique = (typeof dropdownFilterOptions.EnforceUnique === "undefined" ? true : dropdownFilterOptions.EnforceUnique); 
 
\t dropdownFilterOptions.AllowEmpty = (typeof dropdownFilterOptions.AllowEmpty === "undefined" ? true : dropdownFilterOptions.AllowEmpty); 
 
\t dropdownFilterOptions.RequireSelection = (typeof dropdownFilterOptions.RequireSelection === "undefined" ? true : dropdownFilterOptions.RequireSelection); 
 
\t dropdownFilterOptions.NoSelectionMessage = (typeof dropdownFilterOptions.NoSelectionMessage === "undefined" ? "Please select a value." : dropdownFilterOptions.NoSelectionMessage); 
 

 
\t //Parameter Validation. 
 
\t var parameterValidationSuccess = true; 
 
\t if (typeof dropdownFilterOptions.ConnectedWebPartID === "undefined") { 
 
\t \t throw "ConnectedWebPartID is required!"; 
 
\t \t parameterValidationSuccess = false; 
 
\t } 
 
\t if (typeof dropdownFilterOptions.ListTitle === "undefined") { 
 
\t \t throw "ListTitle is required."; 
 
\t \t parameterValidationSuccess = false; 
 
\t } 
 
\t if (typeof dropdownFilterOptions.WebPartID === "undefined") { 
 
\t \t throw "WebPartID is required."; 
 
\t \t parameterValidationSuccess = false; 
 
\t } 
 
\t if (!parameterValidationSuccess) return;

Répondre

1

Je suppose qu'il n'y a pas de raccourci pour vérifier les propriétés de l'objet requis (il doit être fait un par un). Si quelqu'un sait mieux, corrigez-moi!

Pour attribuer quelque chose aux paramètres ne sont pas nécessaires, Object.assign() est un bon choix:

// parameterObject is passed into the function 
// parameterObject === { prop1: "Peter", prop3: "yep", prop4: 500 } 
var defaultObject = { prop1: "default value 1", prop2: "default value 2" }; 
var finalObject = Object.assign(defaultObject, parameterObject); 
// finalObject === { prop1: "Peter", prop2: "default value 2", prop3: "yep", prop4: 500 } 

Au-dessus du parameterObject, qui est passé dans la fonction, est affectée dans le defaultObject. Cela remplace toutes les propriétés de defaultObject qui peuvent être trouvées à partir de parameterObject mais laisse intacts ceux qui ne sont qu'une partie de defaultObject.

MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

+0

Merci! J'utiliserai objectivement Object.Assign pour assigner des valeurs par défaut, mais je chercherai toujours un meilleur moyen de vérifier les paramètres requis. –