2017-09-03 78 views
1

我写了一个接受对象作为参数的函数。所述对象包含各种附加参数。这与许多jQuery函数一样工作。确保函数库内的函数在范围参数中调用

什么是确保对象包含所需最小参数的最佳方法,以及如何将缺省值分配给那些不需要的参数?

这是我现在正在做的。

/* 
 
\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;

回答

1

我想有没有捷径,以检查所需的对象属性(它必须完成一个接一个)。如果有人知道更好,请纠正我!

对于在不需要参数指定的东西,Object.assign()是一个不错的选择:

// 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 } 

以上的parameterObject,传递到函数,被分配到defaultObject。这将覆盖可能从parameterObject中找到的所有defaultObject的属性,但不会触及仅为defaultObject一部分的属性。

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

+0

谢谢!我会反对使用Object.Assign来分配默认值,但我仍然会寻找更好的方法来检查所需的参数。 –