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属性来模拟函数重载:

 

Code
posted on 2009-05-11 17:10  阿巍  阅读(304)  评论(2)    收藏  举报