Is it possible to override a function based on the number of parameters that you are passing into it? For instance:
function abc(name) {
document.write ('My name is' + name);
}
function abc(name,friend) {
document.write ('My name is' + name + 'and my best friend\'s name is' + friend);
}
So in the HTML if I just called abc(george) it would use the first version of the function, but if I called abc(george,john) it would use the second version.
There may be other ways to accomplish the example I used, but I'm just wondering if the concept is sound in javascript.
JavaScript does not support function overloading.
You can, however:
if (typeof friend === "undefined") {
// do something
} else {
// do something else
}
Since it wasn't mentioned here I thought I'd throw this out there as well. You could also use the arguments object if your sole intention is to override based on the number of arguments (like you mention in your first sentence):
switch (arguments.length) {
case 0:
//Probably error
break;
case 1:
//Do something
break;
case 2:
default: //Fall through to handle case of more parameters
//Do something else
break;
}
Yup, indeed, JavaScript does this by default. If you have a function:
function addInts(a, b, c)
{
if(c != undefined)
return a + b + c;
else
return a + b;
}
addInts(3, 4);
addInts(3, 4, 5);
You can leave the required argument and pass the remainder in an object
abc(name);
abc(name, {"friend": friend});
abc(name, {"friend": friend, "age": 21});
function abc(name, extra) {
if (!extra.friend)
alert("no mates");
for (var key in extra)
...
}
No, Native Javascript does not allow to overload functions.
A Workaround is just don't send that parameter. You will get undefined in the last parameter.
来源:https://stackoverflow.com/questions/2738508/override-javascript-function-based-on-passed-parameters