javascript-arguments实现函数重载



一、arguments

   

    面向对象的javascript,具备面向对象语言的特征:抽象,利用这点,我们已经在之前的几篇博客中介绍过,对象的创建,封装,和继承,还有一个没有涉及,就是多态。视频看完了,总结中也一直没有找到javascript中多态的知识。

多态即拥有相同的函数名,但是不同的类中表现不同的执行。在javascript中,从上篇博客中可以看到,子类可以继承父类,但是,并没有改写父类的方法,只是单纯的调用。网上也查找过,同样是一样的,javascript没有多态。

         但是在操作中,却发现javascript一个有趣的现象:定义无参数,调用却有参数。

 

functionbox()       // 我们这样定义:

{

 return arguments[0]+‘|‘+arguments[1];

 return arguments.length;

}

 //却这么调用

alert(box(‘aaa‘,‘34‘));        // aaa34   (输出参数)

// 2  ——参数个数(length)

同样,我们在调用继承(call)的时候也可以在子类中这么使用:callthispropro2)。

 

       javascript中函数的参数是没有类型的,并且参数个数也是任意的,利用一个重要的对象:arguments编写灵活的函数,这应该属于函数重载的范畴吧,我姑且这么理解。

 

二、arguments实现函数重载

 

知道了arguments这个对象,我们怎么使用呢?受javascript本身是弱类型的脚本语言的局限,javascript参数是没有任何限制的,所以这里实现的函数重载不想一般语言那么强大,只可以根据参数个数不同进行选择。

既然arguments可以接受传进来的参数,那么就可以根据传进来的参数个数进行判断,进行何种操作。例如,我们根据传进来的参数个数来读取某个节点的CSS样式,或者设置该节点的样式。

//设置CSS

Base.prototype.css= function (attr, value) {

for (var i = 0; i <this.elements.length; i ++)

{

if (arguments.length ==1) //如果传进一个参数,那么就是读取节点样式。

{

if (typeofwindow.getComputedStyle != ‘undefined‘)

{        //w3c标准

returnwindow.getComputedStyle(this.elements[i], null)[attr];

}

else if (typeofthis.elements[i].currentStyle != ‘undeinfed‘)

{     //IE标准

returnthis.elements[i].currentStyle[attr];

}

}

Else //参数个数不为一,那么就设置节点样式。

{

this.elements[i].style[attr]= value;

}

}

return this;

}

 

总结:javascript虽然只是一个脚本语言,很多结构或者语言,特别是数据类型,不像c#,c++,java有着严谨的语言结构,格式要求,但是就其简单易学的特点,足以让javascript有广泛的用途。最初涉及到javascript,也只是知道它可以协助html实现动态页面效果,但是在不断的恶学习过程中,发现javascript真的是很实用的,它编写简单,但是可以供我们调用的功能很多,最初只是对它了解甚少,简单的页面制作发挥不了它的真实水平。跟着视频做了一个页面后,感受到了javascript就是动态连接CSShtml的一个出彩的桥梁。有了它,才可以将CSShtml做得更灵活。

       javascript虽小,但是五脏俱全。函数,对象,BOMDOM……这些东西每一个都是那么的让人喜欢,提供了我们想要操作html的几乎所有方法。

     有时,我们学习的太匆忙,忘记了对这个知识进行审视,忽略了很多原本就存在的东西,而去绕圈了。

javascript-arguments实现函数重载,布布扣,bubuko.com

javascript-arguments实现函数重载

上一篇:java中的静态变量---static


下一篇:java实现对HDFS增删改查(CRUD)等操作