我有2个jQuery函数。一个叫另一个(理论上......)。这些是:
$.testFunction = function(arg1){
alert("testFunction(arg1)");
$.testFunction(arg1, "");
}
$.testFunction = function(arg1, arg2){
alert("testFunction(arg1, arg2)");
alert("arg1: " + arg1 + "\narg2: " + arg2);
}
我有两个函数,因为当我没有第二个参数传递时,我想调用它们的简单版本。 但是,当我这样打电话时:
$.testFunction("first param");
alert("Before second call");
$.testFunction("first param", "second param");
它总是调用第二个,并且(在警报窗口中)放置:“testFunction(arg1,arg2)”然后是“arg1:first param arg2: undefined ”。为什么这样工作?当我只传递一个参数时,为什么不调用第一个函数?
答案 0 :(得分:2)
Javascript不支持方法重载(至少在传统意义上)是原因。
第二个功能是覆盖第一个功能。
答案 1 :(得分:1)
javascript中没有函数重载,第二个函数替换了第一个函数。
您可以像这样检查arguments
对象:
$.testFunction = function(arg1, arg2){
if(arguments.length == 1){
// handle one argument
}else if(arguments.length == 2{
// handle 2 arguments
}
}
答案 2 :(得分:1)
呃 - 你正在立即覆盖第一个功能。这相当于你正在做的事情:
x = "foo";
x = "bar";
alert(x); // 'bar' -- "why isn't this foo????!?!"
一个好的选择是编写一个函数,它的行为会有所不同,具体取决于传递给它的参数个数:
var testFunction = function(a, b) {
if (b === undefined) {
// no second parameter
}
};
答案 3 :(得分:1)
你正在覆盖这个功能。 Javascript没有重载函数的概念。
相反,函数接受任意数量的参数,您可以通过特殊的“arguments”属性访问它们。
$.testFunction = function(arg1, arg2){
if(arguments.length == 2){
alert("arg1: " + arg1 + "\narg2: " + arg2);
}else{
alert("arg1: " + arg1);
}
}
答案 4 :(得分:1)
您正在重新定义函数并使用两个参数函数有效地替换第一个单个参数函数。现在你真的只有一个功能。
您可能希望look at this article可能有助于重载。
答案 5 :(得分:1)
$.testFunction = function(arg1, arg2){
if(arg2 === null || arg2 === undefined){
// run the first version
}else{
// run the second version
}
}
尝试相反 - 这样,你只有一个函数,你只需在执行正文之前检查第二个参数的存在。