所以我有js文件,用以下方法:
var DBProcessing = function()
{
console.log("ok")
...
}
var DBProcessing = function(str)
{
console.log(str);
...
}
在致电DBProcessing()
时,我正在打印undefined
有没有办法显式调用方法而没有签名中的变量?
答案 0 :(得分:6)
修改函数itelf以有条件地设置str
var DBProcessing = function(str)
{
str = str || 'ok';
console.log(str);
...
}
Javascript与强类型语言不同,您必须在其中提供有关参数数量和类型的具体方法签名。
在传统的强类型语言中,您可以实现方法重载,如
public void OverloadedMethod()
{
}
public void OverloadedMethod(int id)
{
}
public void OverloadedMethod(int id, int age)
{
}
你必须在论证的数量和类型方面非常具体。
在javascript中,没有这样的方法声明,你只能用接受变量类型/数量输入的方法真正声明一个方法 signature 。方法本身取决于如何处理这些参数。
function JSMethod(id, age){
console.log(id);
console.log(age);
}
JSMethod();
//outputs 'undefined', 'undefined'
JSMethod(1);
//outputs 1, 'undefined'
JSMethod(1, 26);
//outputs 1, 26
好的,如果你通过第三个参数怎么办?你可以做到
function JSMethod(id, age){
console.log(id);
console.log(age);
console.log(arguments[2]);
}
JSMethod(1, 26, 99);
//outputs 1, 26, 99
这是因为每个方法都有一个arguments对象,其中包含被调用者提供的所有传递参数。
但是,最佳实践要求您尽可能清楚地使用您的方法。因此,虽然javascript方法可以接受变量类型/数量的参数,但最好将它们声明并设置为默认值(如果需要)
function JSMethod(id, age){
id = id || 1;
age = age || 16;
}
答案 1 :(得分:3)
定义参数但不要传递。您可以通过以下方式完成:
var DBProcessing = function(str)
{
if(str !== undefined){
// Things to do when str is passed
} else {
// Things to do when str is not passed
}
}
答案 2 :(得分:2)
为您的示例使用以下模式。如上所述,您只能声明一次函数语句 - 否则最后一个函数语句将优先。建议查看与javascript中方法重载相关的更多示例,尤其是与arguments
和类型检查相关的。
var DBProcessing = function(str){
if(arguments.length===0) {
console.log("ok")
}
else{
console.log(str);
}
}