所以我有js文件,使用以下方法:

var DBProcessing = function()
{
console.log("ok")
...
}

var DBProcessing = function(str)
{
console.log(str);
...
}

在调用DBProcessing()时,我正在打印undefined
有没有办法在签名中没有变量的情况下显式调用该方法?

最佳答案

修改函数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中,没有此类方法声明,并且您只能使用接受可变类型/输入数量的方法来真正声明一个方法签名。这些参数的处理方式由您自己决定。
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;
}

关于javascript - JavaScript中的重写功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33082424/

10-11 06:49