学习JavaScript有几天了,今天看到JS中的面向对象编程。我们知道在一般的面向对象的编程中方法是可以重载的,通俗得说就是可重载方法的调用是根据形参决定的。比如说一个类中有两个方法(不完整):
cal (a,b) { return a+b;};
cal (a,b,c) { return a*b;};
如果调用第二个带三个参数的方法”cal(1,2,3);”,将返回1乘2的值,而不是1加2。
然而在JavaScript中函数是不支持重载的,如果我们必须要用到重载怎么办呢?这时候就得用到arguments对象了,它可以检测到返回的函数参数个数。我们可以调用它的length属性来做判断从而达到防重载的效果。用法如下:
function returnArgs (){ alert(arguments.length); }
returnArgs("小","强"); //输出2
returnArgs(2009); //输出1
returnArgs(); //输出0
总结一下写一个小程序,下面的脚本代码一定会输出”3|6″从而模仿实现了JavaScript的函数重载:
<script type="text/javascript">
function cal (a,b,c){
if (arguments.length == 2){
return a+b;
}
else if(arguments.length == 3){
return a*b*c;
}
}
document.write (cal(1,2) + " | ");
document.write (cal(1,2,3));
</script>
是参数类型变了,怎么办、。?》
@jim19 这个我道没怎么深究.你可以去请教一下我的链接里面的”苏洋博客”同学.
@jim19 我想那就以实际参数的类型来重载函数就行了吧.把类型做为重载的判断条件.
╮(╯▽╰)╭ 我要什么时候才能学会JavaScript啊 学会编程了就是跨出了一大步啊!
@0cai 我都学了好长时间编程了但就是不精通,所以现在从JS开始先搞懂一门再说^!^
和c++差不多呀
@houkai JavaScript的语法和C,C++差不到哪儿去^!^
说实话不知道重载到底什么意思
同一个函数根据传递参数不同选择执行的某个函数体或者说是方法体。
额,技术人才,是从事这行业的?对了,谢谢提醒博客“突出”问题,呵呵。这主题是参考幸福收藏夹做的?
@Mr Bie 呵呵。别笑我啊。我可是JS新手^!^用的是一个框架可能在结构上会比较相似把。
你这里不能写代码,我代码发邮件给你!
@踏雪残情 先前还没注意到这个问题^!^
留言内容超出留言框的高度时没有滚动条。。。
@踏雪残情 好。我过去看看。
不知在哪本书里看过,java可以根据参数形式来调用类中同名方法,执行不同的语句,不过,我去PHP5里试下一下,似乎不行,会提示不能重新声明某个方法。
受你的启发,我想用PHP来实现这样的,不过PHP里函数没有arguments这样的对象,似乎PHP里的函数都没有对象。我翻了一下几个月前的笔记,发现PHP里的函数是可以给默认值的,于是也便实现了同样的效果。
@踏雪残情 应该是PHP和JavaScript对函数(方法)的处理机制不同吗。
不会JS哟。。
@小奥 我也是啊。就是不会才慢慢学呢。
你是学的网络教程还是书,我只会用和修现成的,不会自己整,可怜
@博译论 我是自己买的书,不过这书太恶心了将就在看呢。本来想买“悟透javascript”的这儿的书店书太少了。所以就随便了。我觉得网上的js教程都讲的不好。