传递一个在多个参数的函数参数在JavaScript

传递一个在多个参数的函数参数在JavaScript

问题描述:

我的角度功能,在服务事端等规定,传递一个在多个参数的函数参数在JavaScript

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

现在,在controller,我通过调用这个:

mySer.isConfigurable(null, conf);

但是通过null看起来有点哇。

我试过打电话mySer.isConfigurable(conf);,但这使得conf匹配功能的first parameter

取而代之的是,还有其他方式只通过conf

也许你可以切换参数定义的顺序?

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

然后就可以调用只是mySer.isConfigurable(conf);product在这种情况下是不确定的,并且将评估为false。

+0

开关PARAMATERS是好的..但这样做的任何通用的方式调用这个? –

+1

我不相信。在不同的地方调用唯一参数实际上是一个不同的变量时,也可能会引起混淆。我想你也可以做两个独立的帮助函数,它们用不同的参数调用这个'isConfigurable'函数。 – Caleb

如果你不想使用null那么你需要像互换波纹管的功能参数。

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

而现在如果你调用该函数传入一个参数,这将是会undefined传递configproduct参数的值。

mySer.isConfigurable(conf); 
+0

切换参数是好的..但任何通用的方式来做到这一点? –

+2

@nowhewhomustnotbenamed。是的,这是通常的做法。强制性参数先行,完全是为了避免你遇到的问题。否则,应该对'arguments'进行冗长的解析,正如另一个答案所解释的那样。 – estus

如果有具有不同的参数数目,然后可以使用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)