2017-09-03 27 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來分配默認值,但我仍然會尋找更好的方法來檢查所需的參數。 –