簡體   English   中英

Javascript回調和可選參數

[英]Javascript callbacks and optional params

如果我正在創建一個帶有兩個必需參數的函數,一個是回調函數,還有幾個可選參數,我可以如何對其進行編碼,這樣當我調用它時只有2個必需參數可以工作。

例如:

功能保存(顏色,大小,重量,回調){...}

顏色和回調是強制性的,尺寸和重量是可選的。 因此,如果有人想要僅使用顏色和回調來調用此函數...

save('blue',function(...){...}){...}

 save('blue', 56, function(...) { ... }) { ... }

但這會將回調函數分配給大小和重量,我該如何解決這個問題呢?

參數對象可以很好地解決您的問題,如下所示:

function save(params, callback) {
    params.color = params.color || 'default';
    params.size = params.size || 0;
    params.weight = params.weight || 0;

    // ...

    if (callback instanceof Function) { callback(); }
}

使用這樣:

save({ color: 'blue', weight: 100 }, function () { /* ... */ });

JavaScript參數必須在位置上與預期參數對齊,因此在傳遞的其他參數之間省略參數是行不通的。 一種選擇是在單個對象中傳遞可選參數。

// callback is required
// additional arguments are passed as props of 'options'
function save(options, callback) { 
    var color = options.color || 'blue';
    var size = options.size || 72;
}

像這樣傳遞給他們:

save({ color: 'red' }, function() {});

您可以檢查arguments.length以查看傳遞了多少個參數,並檢查typeof weight === 'function'是否typeof weight === 'function'以查看參數是否為回調。

使用此信息,您可以確定傳入的內容並根據需要重新分配參數。

首先,將回調默認設置為自身或下一個最接近的參數,直到可選參數的結束(第一個),

接下來檢查可選參數是否設置為函數(回調)或未定義,並將它們設置為默認值或將它們設置為自己。

function optional_params(color, size, weight, callback){
    // set callback to itself or the next optional paramater until you have checked all optional paramaters
  callback = callback || weight || size;
    // check if weight is a function(the callback) or undefined and if so set to a default value, otherwise set weight as weight
  weight = typeof weight != 'function' && typeof weight != 'undefined' ? weight : "1.2kg";
    // do the same as above with weight
  size = typeof size != 'function' && typeof size != 'undefined' ? size : "L";
    // invoke callback
  callback(color,size,weight);
}

用法:

optional_params("Red",function(color,size,weight){
  console.log("color: " + color); // color: Red
  console.log("size: " + size); // size: L //(default)
  console.log("weight: " + weight); // weight: 1.2kg //(default)
});

您可以檢查參數的類型: http//jsfiddle.net/wknVA/

我推薦ArgueJS

function save() {
  arguments = __({color: undefined, size: [undefined], weight: [undefined], callback: Function})

  // access your args by arguments.paramName. Ex.:
  // alert(arguments.color)
...
}

您還可以通過更改所需類型的undefined來檢查參數的類型。

除了SLaks的答案之外,調用者並不總是可以假設他們可以發送他們想要的任何args,記錄args是可選的函數是最好的方法,對於函數調用實現者,arg檢查的類型和可選的分組arg列表末尾的args是其他的。 制作兩個可選的相同類型的選項會產生混淆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM