ECMAScript中的函数虽然不能像C#,Java语言那样直接支持重载。但可通过arguments对象来实现。首先我们来看下面这个例子:
function sayHi() {
if (arguments[0] == "bye") {
return;
}
alert(arguments[0]);
}
sayHi("Yes","No");
//sayHi("bye");
上面这段代码我先声明了一个sayHi的函数,此函数没有任何参数,但我下面第一次调用它的时候怎么写了两个参数进去呢?这正是JavaScript的独特之处,与其他程序设计语言不同,ECMAScript不会验证传递给函数的参数个数是否等于函数定义的参数个数,开发者定义的函数都可以接受任意个数的参数(最多25个),而不会引发任何错误。任何遗漏的参数都会以undefined传递给寒素,多余的参数将忽略。在上面的例子中,第一次调用sayHi函数时,我想“Yes”和“No”两个值其实都已经传递给了它(ps:猜测,不然怎么if语句可以进行判断呢),arguments[0]用于访问传进去的第一个参数的值(无需参数名),即我们传进去的“Yes”(第一个参数位于位置0,第二个参数位于位置1,以此类推),判断为不相等,执行alert语句;第二次调用时,通过arguments[0]判断出传进去的参数和if条件里的值一样,所以执行return。
arguments除了可以判断参数值的功能外,还可以检测传递给函数的参数个数,引用属性arguments.length即可,看下面的代码:
function howManyArgs() {
alert(arguments.length);
}
howManyArgs(1,2,3,4); //outputs "4"
howManyArgs("a","b","c"); //outputs "3"
howManyArgs(); //outputs "0"最后,我们同时利用arguments[]和arguments.length属性来模拟函数重载:


浙公网安备 33010602011771号