2017-05-06 149 views
1

我的角度功能,在服務事端等規定,傳遞一個在多個參數的函數參數在JavaScript

$delegate.isConfigurable = function (product, config) { 
       if (product) { 
        ///..... 
       } 
       return config.getDetail(); 
      }; 

現在,在controller,我通過調用這個:

mySer.isConfigurable(null, conf);

但是通過null看起來有點哇。

我試過打電話mySer.isConfigurable(conf);,但這使得conf匹配功能的first parameter

取而代之的是,還有其他方式只通過conf

回答

3

也許你可以切換參數定義的順序?

$delegate.isConfigurable = function (config, product) { 
      if (product) { 
       ///..... 
      } 
      return config.getDetail(); 
     }; 

然後就可以調用只是mySer.isConfigurable(conf);product在這種情況下是不確定的,並且將評估爲false。

+0

開關PARAMATERS是好的..但這樣做的任何通用的方式調用這個? –

+1

我不相信。在不同的地方調用唯一參數實際上是一個不同的變量時,也可能會引起混淆。我想你也可以做兩個獨立的幫助函數,它們用不同的參數調用這個'isConfigurable'函數。 – Caleb

3

如果你不想使用null那麼你需要像互換波紋管的功能參數。

$delegate.isConfigurable = function (config, product) { 
       if (product) { 
        ///..... 
       } 
       return config.getDetail(); 
      }; 

而現在如果你調用該函數傳入一個參數,這將是會undefined傳遞configproduct參數的值。

mySer.isConfigurable(conf); 
+0

切換參數是好的..但任何通用的方式來做到這一點? –

+2

@nowhewhomustnotbenamed。是的,這是通常的做法。強制性參數先行,完全是爲了避免你遇到的問題。否則,應該對'arguments'進行冗長的解析,正如另一個答案所解釋的那樣。 – estus

3

如果有具有不同的參數數目,然後可以使用arguments object

Here is the documentation

arguments對象的功能是對應於傳遞到參數數組狀物體一個function.The參數對象可用的所有功能內的局部變量

所以,你的代碼將

$delegate.isConfigurable = function() { 
    var param = null, 
    config = null; 
    if (arguments && arguments.length == 2) { 
    // you have param and config 
    param = arguments[0]; 
    config = arguments[1]; 
    } else if (arguments && arguments.length == 1) { 
    config = arguments[0]; 
    } 
    return config.getDetail(); 
}; 

,您可以通過一個或兩個或N PARAM數

mySer.isConfigurable(conf) 
mySer.isConfigurable(param,conf) 
mySer.isConfigurable(param1,param2,conf) 
相關問題