[英]Javascript function(params) and function({ params }), one function two call types
有什么辦法可以編寫一個函數,以便像這樣以兩種方式調用它?
我知道如何在函數中編寫兩個 params 結構,但我想知道如何在單個函數中驗證兩個 params 結構。
functionToCall(1, 'value', true);
和
functionToCall({
param1: 1,
param2: 'value',
param3: true
});
您可以檢查第一個參數,如果它是一個對象,並對缺少的參數進行解構。
如果第一個參數是作為常規所需類型的對象或者類型是any ,則此方法不起作用。
function functionToCall(param1, param2, param3) { if (param1 && typeof param1 === 'object') { ({ param1, param2, param3 } = param1); } console.log(param1, param2, param3); } functionToCall(1, 'value', true); functionToCall({ param1: 1, param2: 'value', param3: true });
您可以使用 rest params 來獲取參數數組。 如果args
數組的長度為 1,則使用對象解構。 如果它不是 1,則在args
數組上使用數組解構。
const functionToCall = (...args) => { let param1, param2, param3; if (args.length === 1) ({ param1, param2, param3 } = args[0]); else ([param1, param2, param3] = args); console.log(param1, param2, param3); }; functionToCall(1, 'value', true); functionToCall({ param1: 1, param2: 'value', param3: true });
例如,您可以這樣做
const functionToCall = () => {
val [param1, param2, param3] = arguments.length == 1
? Object.entries(arguments[0]).map(v => v[1])
: arguments
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.