所以我有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/